我有两个字典,值部分有一个列表。像这样
dict1 = {red:[1,2,3], blue:[7,6,9], green:[3,9,3,1]}
dict2 = {red:[2,1,3], blue:[9,7,6], green:[3,9,1,3]}
在这种情况下,比较必须给出 True ,因为在两个字典中,给定键的列表中包含相同的值。我提出了一个解决方案,其中我可以使用键访问列表值。然后检查列表的长度是否相同,一个列表中的每个值是否存在于另一个列表中。 我认为在python中还有其他方法可以做到这一点。最好的“ pythonic”方法是什么?
答案 0 :(得分:0)
dict1 = {"red": [1, 2, 3], "blue": [7, 6, 9], "green": [3, 9, 3, 1]}
dict2 = {"red": [2, 1, 3], "blue": [9, 7, 6], "green": [3, 9, 1, 3]}
def compare_dicts(a, b):
if set(a.keys()) != set(b.keys()):
# If the keys do not match,
# the dicts can't be equal.
return False
for key, value in a.items():
if key not in b:
# If a key does not exist in `b`,
# but exists in `a`, the dicts
# can't be equal.
return False
if sorted(value) != sorted(b[key]):
# If the sorted lists of values aren't
# equal, the dicts can't be equal.
return False
# Every other case failed to exit, so the dicts
# must be equal.
return True
print(compare_dicts(dict1, dict2))
答案 1 :(得分:-1)
如果您希望比较两个忽略值顺序的列表,则可以将每个列表转换为set
set(list1) == set(list2)
答案 2 :(得分:-1)
您可以使用set
比较两个包含相同元素但顺序不同的列表
>>> dict1 = {'red':[1,2,3], 'blue':[7,6,9], 'green':[3,9,3,1]}
>>> dict2 = {'red':[2,1,3], 'blue':[9,7,6], 'green':[3,9,1,3]}
>>> all(set(v) == set(dict2.get(k)) for k,v in dict1.items())
True
如果字典值可以重复,请使用sorted
进行比较
>>> all(sorted(v) == sorted(dict2.get(k)) for k,v in dict1.items())
True