我有两个清单:
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
我该怎么做?
答案 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)