切片字典的值
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
【讨论】:
以上是关于切片字典的值的主要内容,如果未能解决你的问题,请参考以下文章