是否可以采用[{},{} ...]比较的Python模块?

时间:2017-02-22 02:07:11

标签: python list-comparison

它旨在比较Python中由dict元素组成的两个列表,在每个dict元素中,有两个键。提供样本下方。

A=[{'id':'u2s8Et','value':'David'},{'id':'u2s0PW','value':'Linda'},......]
B=[{'id':'u2s8Et','value':'David'},{'id':'u2s7PA','value':'Steven'},......]

预计会获得哪些元素仅在列表A中可用,列表A中的哪些元素与列表B中的元素不同。是否可以采用任何现有模块进行比较?

unittest 模块中的方法 assertListEqual 接近期望值,但首选某些模块更为全面。

2 个答案:

答案 0 :(得分:3)

主要问题是dict不可清除。但是,因为它们中的每一个都具有相同的键,我们可以将它们转换为可散列类型,如tuple

def parse(values):
    return set(map(tuple, map(dict.values, values)))

>>> parse(A)
>>> {('u2s0PW', 'Linda'), ('u2s8Et', 'David')}

我们现在可以使用set操作来比较每个元素。

In [6]: parse(A).difference(parse(B))
Out[6]: {('u2s0PW', 'Linda')}

In [7]: parse(A).intersection(parse(B))
Out[7]: {('u2s8Et', 'David')}

set.difference会找到A但不是B中的项目,而set.intersection会找到A和{{}中的项目1}}。

修改:由于您的B都采用相同的格式,因此您也可以考虑使用dict

namedtuple

答案 1 :(得分:1)

您可以使用set.intersection()set.difference等设置操作。另外,您应该考虑创建自定义类而不是使用词典。