繁体   English   中英

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

[英]Check if a list item exist in a dictionary

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

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

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

利用一个列表(不是列表列表)仅与一个字典值匹配这一事实,您可以使用默认值为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

一个用于搜索而不是字典中的键的衬里是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM