切片字典的值

时间:2018-07-24 02:21:08

标签: python loops dictionary if-statement slice

我正在尝试编写一个带有三个参数的函数:字典,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))

如果我对这个问题的要求不是很好,或者我犯了一些新秀错误,我深表歉意。总的来说,我对StackOverflow和Python编程还很陌生。有时我在逻辑上思考一些问题时会遇到一些麻烦。

感谢您提供的任何帮助!

3 个答案:

答案 0 :(得分:0)

您只需编写一种逻辑即可:

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

答案 1 :(得分:0)

您可以使其更简单明了:

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

没有必要在带有elif的语句之后写上return(有时这种语句也称为 guards )。

答案 2 :(得分:0)

我尝试使用内置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