Python 查找两个值的键
我需要找出两个值是否具有相同的键 字典如下所示,其中值为列表:Python 查找两个值的键,python,list,dictionary,compare,key-value,Python,List,Dictionary,Compare,Key Value,我需要找出两个值是否具有相同的键 字典如下所示,其中值为列表: d1 = {"a": ["1", "2"], "c": ["5", "8", "76"], "b": ["3", "9"], "o": ["47"]} 因此,我想比较一下,例如(5,8):True您正在寻找子集和超集;这两个值必须是字典值的子集 将元组转换为集合,然后与一起使用,以查找字典中是否有包含这两个值的值: test_set = {"5", "8"} any(test_set.issubset(v) for v in d1
d1 = {"a": ["1", "2"], "c": ["5", "8", "76"], "b": ["3", "9"], "o": ["47"]}
因此,我想比较一下,例如(5,8)
:True
您正在寻找子集和超集;这两个值必须是字典值的子集
将元组转换为集合,然后与一起使用,以查找字典中是否有包含这两个值的值:
test_set = {"5", "8"}
any(test_set.issubset(v) for v in d1.values())
请注意,因为列表中的对象是字符串,所以您也必须在测试集中使用字符串
在这里使用集合就像Python在给定数据结构的情况下所能做到的那样高效;在内部,test\u set.issubset(v)
将列表转换为一个集合,然后针对该临时集合测试test\u set
中的每个元素(每个测试采用恒定时间),使其成为O(N)线性时间操作。如果你必须重复多次,并且性能是一个问题,请考虑在def all_same_key(d, *t):
test_set = set(map(str, t))
return any(test_set.issubset(v) for v in d.values())
然后,您可以使用所有相同的键(d1、5、8)
调用它
演示:
如果必须找到键,则在dict.items()
上使用列表理解,并在test\u set
为子集的值上进行筛选:
[key for key, value in d1.items() if test_set.issubset(value)]
...
[“5”、“8”、“76”]
的列表不同于[“5”、“8”]
——并且迭代字典的值不是字典的好功能……如果我想找到值8的键。有可能吗?“两个值具有相同的键。”:您的意思是,在相同的dict值内,找到两个值(例如5
和8
)所在的dict项,这里是“c”:[“5”,“8”,“76”]
?阅读高级解决方案:)简单实用的解决方案令人赞叹!
[key for key, value in d1.items() if test_set.issubset(value)]