我正在尝试使用密钥在字典whitout内的列表中找到一个值 目的是让我不能在字典中添加相同的名称。
字典看起来像这样:
Dict={'1_number': ['1_name'], '2_number': ['2_name', '3_name']}
所以我试图检查字典中是否存在3_name。
还尝试通过使用2_name搜索2_number来显示2_number,即通过使用其中一个值查找密钥来显示密钥。
答案 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'])]