如何返回布尔值来检查python字典中两个dict中的元素是否相同



我有两个字典:

dict1 = {
'Argentina': ['Buenos Aires'],
'Bangladesh': ['Dhaka'],
'Brazil': ['São Paulo', 'Rio de Janeiro']
dict2 = {
1392685764: 'Tokyo', 1356226629: 'Mumbai', 1156073548: 'Shanghai',
1484247881: 'Mexico City', 1156237133: 'Guangzhou', 1818253931: 'Cairo',
1156228865: 'Beijing', 1840034016: 'New York', 1643318494: 'Moscow',
1764068610: 'Bangkok', 1050529279: 'Dhaka', 1032717330: 'Buenos Aires'}

我想检查dict1中的嵌套值是否与dict2中的值有任何共同的元素。我一直在做这个来源:

def f(d1, d2, id, country):
return set(d1.values()) == set(d2.values())

因此,当使用参数dict1、dict2、country=Argentina和id=1032717330调用函数时,返回True。

但是结果总是一个TypeError。任何帮助都将不胜感激。

您需要转换第一个字典值使flatern,

def f(d1, d2):
'''d1 values should be list'''
return set([i for sublist in d1.values() for i in sublist]) == set(d2.values())

执行:

In [1]: f(dict1, dict2)
Out[1]: False

编辑对于相反的要求,您必须执行此操作。您需要检查d1.value中是否存在d2.value

def f(d1, d2, id, country):
return d2.get(id) in d1.get(country)

f(dict1, dict2, 1032717330, 'Argentina')
# True

似乎dict1有列表作为值,所以您需要"链";首先将它们放在一个列表中。你可以试试这样的东西:

from itertools import chain
set(chain(*dict1.values())) == set(dict2.values())

目前还不清楚你想如何使用id和country,所以我把它排除在功能之外。

字典和集合都是无序的,这可能是您得到不同结果的原因。假设Python,你可以做这样的事情:

def has_same_values(d1, d2):
values1 = []
values2 = []
for key in d1.keys():
values1.extend(d1[key])
for key in d2.keys():
values2.extend(d2[key])
return values1.sort() == values2.sort()

最新更新