Python:如何确定作为字典值的无序元组列表是否在另一个dictionary.values()中?

Python:如何确定作为字典值的无序元组列表是否在另一个dictionary.values()中?,python,dictionary,Python,Dictionary,当我运行此代码时,我希望它从dict1返回键1和键3,但它只返回第一个键。我需要它返回dict1中每个键/值迭代的所有匹配项。谢谢你的帮助 dict1={1:[(3.5, 7.8),(1.5, 2.5)], 2: [(6.3, 8.5)], 3:[(3.4,5.6)]} dict2={1:[(1.5, 2.5), (3.5, 7.8)], 2: [(2.3, 1.5)], 3:[(3.4,5.6)]} for k, v in dict1.items(): if set(v).issub

当我运行此代码时,我希望它从dict1返回键1和键3,但它只返回第一个键。我需要它返回dict1中每个键/值迭代的所有匹配项。谢谢你的帮助

dict1={1:[(3.5, 7.8),(1.5, 2.5)], 2: [(6.3, 8.5)], 3:[(3.4,5.6)]}
dict2={1:[(1.5, 2.5), (3.5, 7.8)], 2: [(2.3, 1.5)], 3:[(3.4,5.6)]}

for k, v in dict1.items():
    if set(v).issubset(set(next(iter(dict2.values())))):
       print(k, v)

代码的问题非常明显:

for k, v in dict1.items():
    if set(v).issubset(set(next(iter(dict2.values())))):
       print(k, v)
下一步(iter(dict2.values())只获取第一个值。如果要迭代所有值,必须实际迭代所有值:

for k, v in dict1.items():
    for v2 in dict2.values():
        if set(v).issubset(set(v2)):
           print(k, v)
           break
如果您真的想在工作后将其压缩成一行,您可以:

for k, v in dict1.items():
    if any(set(v).issubset(set(v2)) for v2 in dict2.values()):
       print(k, v)
无论哪种方式,您都可能希望将
set(v)
置于循环之外,不过:

for k, v in dict1.items():
    v = set(v)
    if any(v.issubset(set(v2)) for v2 in dict2.values()):
       print(k, v)

当我们进行测试时,您真的需要子集测试吗?您的所有示例元组都是2元组,因此
v.issubset(v2)
v==v2
时为真。测试更简单:

for k, v in dict1.items():
    v = set(v)
    if any(v == set(v2) for v2 in dict2.values()):
       print(k, v)
或:

或:


set(next(iter(dict2.values())
总是一样的,它是一个包含字典第一个值的集合。您可以保证它是
{(1.5,2.5)、(3.5,7.8)}
在Python 3.7中,您真的需要在这里进行子集测试,还是只需要进行测试?因为示例中的所有元组都是2元组,所以它们之间没有区别;如果在实际代码中是这样,您可以简化事情……我需要值相等,而不管每个列表中的元组项目的顺序如何,即键1在两本词典中
for k, v in dict1.items():
    if set(v) in {set(v2) for v2 in dict2.values()}:
       print(k, v)
for k, v in dict1.items():
    if set(v) in map(set, dict2.values()):
       print(k, v)
>>> dict2_items = map(set, dict2.values())
>>> [(k,v) for k, v in dict1.items() if set(v) in dict2_items]
[(1, [(3.5, 7.8), (1.5, 2.5)]), (3, [(3.4, 5.6)])]