在Python中比较字典中的列表

时间:2018-07-27 11:09:51

标签: python python-2.7

我有两个字典,值部分有一个列表。像这样

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”方法是什么?

3 个答案:

答案 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