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)线性时间操作。如果你必须重复多次,并且性能是一个问题,请考虑在 D1中设置值,以开始。

作为一个也接受整数的函数:

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)]