如何在字典内的列表中查找值

时间:2014-10-24 11:38:55

标签: python list dictionary

我正在尝试使用密钥在字典whitout内的列表中找到一个值 目的是让我不能在字典中添加相同的名称。

字典看起来像这样:

Dict={'1_number': ['1_name'], '2_number': ['2_name', '3_name']}

所以我试图检查字典中是否存在3_name。

还尝试通过使用2_name搜索2_number来显示2_number,即通过使用其中一个值查找密钥来显示密钥。

3 个答案:

答案 0 :(得分:4)

您实际上可以组合列表理解来迭代字典值any以进行短路评估,以搜索项目以获得所需结果

>>> any('3_name' in item for item in Dict.values())
True

或者,如果您有兴趣返回所有具有相关项的字典实例,只需确保检查其值中的项的条件是否在if语句中,并且键值对作为过滤器列表的一部分返回理解

>>> [(k, v) for k, v in Dict.items() if '3_name' in v]
[('2_number', ['2_name', '3_name'])]

最后,如果您确定只有一个项目,或者您想要返回第一个项目,请使用带有下一个项目的生成器

>>> next((k, v) for k, v in Dict.items() if '3_name' in v)
('2_number', ['2_name', '3_name'])

答案 1 :(得分:1)

您可以迭代字典的值并检查是否存在所需列表值:

>>> def find_in_dict(d, name):
>>>    for k,vals in d.iteritems():
>>>        if name in vals:
>>>           return k
>>>    else:
>>>       return False

>>> find_in_dict(d,'3_name')
'2_number'
>>> find_in_dict(d,'4_name')
False

答案 2 :(得分:0)

您可以使用列表推导来搜索字典的值,如果找到与您要搜索的值对应的键,则返回tuple (key, value)

d = {'1_number': ['1_name'], '2_number': ['2_name', '3_name']}
search = '3_name'

>>> [(key, value) for key, value in d.items() if search in value]
[('2_number', ['2_name', '3_name'])]