主要問題是dict
s不可排除。因爲它們中的每一個都具有相同的密鑰,但我們可以將它們轉換爲可哈希類型,如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
和B
的項目。
編輯:既然你dict
一切都遵循相同的格式,你可以考慮使用一個namedtuple
,以及。
In [1]: from collections import namedtuple
In [2]: entry = namedtuple("Entry", ("id", "value"))
In [3]: A = [{'id':'u2s8Et', 'value':'David'}, {'id':'u2s0PW', 'value':'Linda'}]
...: B = [{'id':'u2s8Et', 'value':'David'}, {'id':'u2s7PA', 'value':'Steven'}]
...:
In [4]: def parse_to_entry(values):
...: return {entry(d["id"], d["value"]) for d in values}
...:
In [5]: parse_to_entry(A)
Out[5]: {Entry(id='u2s0PW', value='Linda'), Entry(id='u2s8Et', value='David')}
In [6]: parse_to_entry(A).difference(parse_to_entry(B))
Out[6]: {Entry(id='u2s0PW', value='Linda')}
In [7]: parse_to_entry(A).intersection(parse_to_entry(B))
Out[7]: {Entry(id='u2s8Et', value='David')}
您可以對列表使用set操作。 –
您還應該考慮創建一個類,而不是使用字典。 –
@ Code-Apprentice emm,它是一個使用class而不是dict作爲列表元素的選項。謝謝。 – user7572446