检查两个dicts列表并筛选一个列表以删除出现在其他列表中的dicts

时间:2016-08-31 09:47:57

标签: python list dictionary unique

我有两个清单:

a = [{'val': 'abc', 'locval': {'China':24},'key3': 'meh'},{'val': 'men', 'locval': {'China':24},'key3': 'bla'},{'val': 'men', 'locval': {'India':56},'key3': 'cheh'}]
b = [{'val': 'abc', 'locval': {'China':24},'key3': 'cheh'}, {'val': 'def', 'locval': {'India':56},'key3': 'men'}]

并希望从列表A中删除某些项目(我不介意创建新列表),这些项目基本上与基于两个特定键的列表B中的项目相同 - locval和{{1} }。例如,新列表应该变为:

val

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以从 b dicts列表中创建所有有趣的键/值配对对的 set ,然后只保留dicts a 没有相同的键/值配对:

a = [{'val': 'abc', 'locval': {'China':24},'key3': 'meh'},{'val': 'men', 'locval': {'China':24},'key3': 'bla'},{'val': 'men', 'locval': {'India':56},'key3': 'cheh'}]

b = [{'val': 'abc', 'locval': {'China':24},'key3': 'cheh'}, {'val': 'def', 'locval': {'India':56},'key3': 'men'}]


st = {(tuple(d["locval"].items()), d["val"]) for d in b}

a[:] = (d for d in a if (tuple(d["locval"].items()), d["val"])  not in st)

print(a)