切片字典的值

Posted

技术标签:

【中文标题】切片字典的值【英文标题】:Slicing the Values of a Dictionary 【发布时间】:2018-12-31 12:58:23 【问题描述】:

我正在尝试编写一个接受三个参数的函数:字典emp_dict、字符串username 和数字emp_no

字典中的键值存储员工编号作为键和员工姓名的字符串。用户名的前三个字母或后三个字母必须与员工姓名的前三个字母匹配。

如何将字符串 username 与字典的前三个值字段中的每一个进行比较。

其他约束包括:

给定的员工编号存在于字典中 用户名必须至少为 4 个字符 用户名的前三个字母或后三个字母必须与员工姓名的前三个字母匹配

这是我目前所拥有的:

def validate_employee(emp_dict, username, emp_no):
if emp_no not in emp_dict:
    return False
elif len(username) < 4:
    return False

这就是我遇到麻烦的地方。后面两个 elif 怎么写?

elif username[0:2.lower == emp_dict.values():
    return True




emp_dict=1111:'Sim',1234:'James',9999:'Amy',5555:'Jessica'
username='Jess' 
emp_no=5555
print(validate_employee(emp_dict, username, emp_no))

如果我没有很好地提出这个问题,或者我犯了一些相当新手的错误,我深表歉意。一般来说,我对 *** 和 Python 编程还是很陌生。我有时在逻辑上思考一些问题时会遇到一些麻烦。

感谢您提供的任何帮助!

【问题讨论】:

【参考方案1】:

你只需要写一个逻辑就是:

elif username[:3] in map(lambda x:x[:3],emp_dict.values()) or username[-3:] in map(lambda x:x[:3],emp_dict.values()):
    return True

或者如果它不区分大小写:

elif username[:3].lower() in map(lambda x:x[:3].lower(),emp_dict.values()) or username[-3:].lower() in map(lambda x:x[:3].lower(),emp_dict.values()):
    return True

例子:

>>> emp_dict=1111:'Sim',1234:'James',9999:'Amy',5555:'Jessica'
>>> username='Jess'
>>> username[:3] in map(lambda x:x[:3],emp_dict.values())
True

【讨论】:

【参考方案2】:

你可以做的更简单和简洁:

def validate_employee(emp_dict, username, emp_no):
    if emp_no not in emp_dict:
        return False
    if len(username) < 4:
        return False

    head = username[:3]
    if list(filter(lambda x: x[:3] == head or x[:3] == head, emp_dict.values())):
        return True

没有必要在带有return 的语句之后写elif(有时这样的语句也称为守卫)。

【讨论】:

【参考方案3】:

我对内置 any()str.startswith() 的尝试:

employees = 
employees[0] = 'smith john'
employees[1] = 'paolo smith'
employees[3] = 'jack daniels'


def validate(emp_dict, username, emp_no):
    if emp_no not in emp_dict:
        return False

    if len(username) < 4:
        return False

    if not any(e.startswith(username[:3]) or e.startswith(username[-3:]) for e in emp_dict.values()):
        return False

    return True

print(validate(employees, 'paolo john', 3))
print(validate(employees, 'john paolo', 3))

打印:

True
False

【讨论】:

以上是关于切片字典的值的主要内容,如果未能解决你的问题,请参考以下文章

go 数组 切片 字典 结构体

在调用列表中的字典中的值时收到“TypeError:列表索引必须是整数或切片,而不是字典”

字典列表中的切片[重复]

go-数组-切片-字典

字典中的 NumPy 切片符号

Go-常识补充-切片-map(类似字典)-字符串-指针-结构体