如何检查项目是列表的字典中是否存在列表?例如,我有以下字典:
dict1 = {0:[0,1,3], 1:[0,2,3]}
例如,[1,0,3]
中存在dict1
并返回相应的key
,但[2,3]
中不存在dict1
。
答案 0 :(得分:2)
利用一个列表(不是列表列表)仅匹配一个字典值的事实,您可以使用具有默认None
的生成器表达式:
>>> dict1 = {0:[0, 1, 3], 1:[0, 2, 3]}
>>> lst = [1, 0, 3]
>>> next((k for k, v in dict1.items() if sorted(v) == sorted(lst)), None)
0
答案 1 :(得分:-1)
在字典中搜索值而不是键的单行内容是:
any(x == <some-value> for x in dict1.itervalues())
但请注意,这是线性搜索。如果订单无关紧要,并且项目不能复制且可以清洗,那么理想情况下,您将把值存储为集合:
>>> dict1 = {0: set([0, 1, 3]), 1: set([0,2,3])}
然后你可以简单地搜索:
>>> any(x == set([1, 0, 3]) for x in dict1.itervalues())
True
如果您不希望将它们存储为集合,并且您的列表可能包含重复项或不可用的对象,那么您可以比较排序值。为了提高效率,您应该预先设定搜索值:
>>> dict1 = {0: [0, 1, 3]), 1: [0,2,3]}
>>> search_value = sorted([1, 0, 3])
>>> any(sorted(x) == search_value for x in dict1.itervalues())
True