检查字典中是否存在列表项

时间:2018-04-30 03:49:39

标签: python python-2.7

如何检查项目是列表的字典中是否存在列表?例如,我有以下字典:

dict1 = {0:[0,1,3], 1:[0,2,3]}

例如,[1,0,3]中存在dict1并返回相应的key,但[2,3]中不存在dict1

2 个答案:

答案 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