python检查字典是否在列表中

时间:2018-02-28 09:11:14

标签: python python-3.x list dictionary

我有一个名为clients_list的列表,其中包含以下字典:

    clients_list =
    [
            {'John Guy': [28, '03171992', 'Student']},
            {'Bobby Jones': [22, '02181982', 'Student']},
            {'Claire Eubanks': [18, '06291998', 'Student']},
    ]

如何使用输入的答案检查是否有人在此列表中?我试过了代码

elif answer in clients_list:
    print(f'{answer} is in our database.')

但它似乎无法正常工作。

6 个答案:

答案 0 :(得分:2)

试试这个

clients_list = [{'John Guy': [28, '03171992', 'Student']},
            {'Bobby Jones': [22, '02181982', 'Student']},
            {'Claire Eubanks': [18, '06291998', 'Student']}]

c= 'John Guy'

for item in clients_list:
    if c in item:
        print c + 'is in our database.'
        break

答案 1 :(得分:1)

假设answer包含"John Guy"。然后,此测试if answer in clients_list会询问字符串"John Guy"是否在字典列表中,当然它不是,因为clients_list是字典列表,而不是字符串。现在你明白为什么你的测试没有达到你期望的效果吗?

这证明了juanpa.arrivilaga的观点,即数据结构与您正在使用的数据结构并不完全匹配。如果要对名称进行查找,则这些名称应为字典键。像

这样的东西
clients_list = {
        'John Guy': [28, '03171992', 'Student'],
        'Bobby Jones': [22, '02181982', 'Student'],
        'Claire Eubanks': [18, '06291998', 'Student'],
        }

您也可以考虑将字典值命名为tuples而不是列表。

答案 2 :(得分:0)

如果您想匹配按键,可以使用set().union

clients_list = [{'John Guy': [28, '03171992', 'Student']},
                {'Bobby Jones': [22, '02181982', 'Student']},
                {'Claire Eubanks': [18, '06291998', 'Student']}]

x = input('Enter a name:')

if x in set().union(*clients_list):
    print('Name found')
else:
    print('Name not found')

答案 3 :(得分:0)

列表元素之间的逗号。

clients_list =[{'John Guy': [28, '03171992', 'Student']},
            {'Bobby Jones': [22, '02181982', 'Student']},
            {'Claire Eubanks': [18, '06291998', 'Student']}]

至于问题,这应该有用

for d in clients_list:
    for person in d.items():
        if "John Guy" in person[0]:
            print (person[1])
            print (person[0]+" is in our database")

答案 4 :(得分:0)

您可以尝试使用zip功能:

clients_list = [{'John Guy': [28, '03171992', 'Student']}, {'Bobby Jones': [22, '02181982', 'Student']}, {'Claire Eubanks': [18, '06291998', 'Student']}]

name = "John Guy"
if name in list(zip(*clients_list))[0]:
     print(name + " is in database.")

输出:

John Guy is in database.

list(zip(*clients_list))将返回一个包含元组的列表,其名称如下:

[('John Guy', 'Bobby Jones', 'Claire Eubanks')]

然后,您所做的就是使用[0]获取列表中的那个元组,并检查该元组是否存在您输入的名称。

或者,您可以解压缩单个名称元组:

names, = list(zip(*clients_list))

并用它来检查你的名字是否在那里:

if name in names:
     print(name + " is in database.")

答案 5 :(得分:0)

clients_list = [
            {'John Guy': [28, '03171992', 'Student']},
            {'Bobby Jones': [22, '02181982', 'Student']},
            {'Claire Eubanks': [18, '06291998', 'Student']}]

def get_name(answer):
    data = ("No Data Present in DB.",{'Error':'Not Found'})
    for index, val in enumerate(clients_list):
        if answer in val.keys():
            data =  (f'{answer} present in database & found at {index}', clients_list[index])
    return data

asnwer = input("Enter a Name")

found, value = get_name(asnwer)

print(found, value)
>>>Bobby Jones present in database & found at 1 {'Bobby Jones': [22, '02181982', 'Student']}