选中两个dict列表并过滤其中一个列表以删除出现在其他lis中的dict

2024-10-02 08:26:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两张单子:

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中的项目相同locvalval。例如,新列表应为:

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

我该怎么做


Tags: 项目列表defval单子abcmehbla
1条回答
网友
1楼 · 发布于 2024-10-02 08:26:33

您可以从dict的b列表中对所有感兴趣的键/值对进行,然后只保留a中没有相同的键/值对的dict:

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)

相关问题 更多 >

    热门问题