它旨在比较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 接近期望值,但首选某些模块更为全面。
答案 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
等设置操作。另外,您应该考虑创建自定义类而不是使用词典。