将词典列表合并为依赖于重复值的较小词典列表



我有一个关于字典列表的问题。让我演示一下我的问题。以下是字典的示例列表:

[{'a' : '1'}, {'b' : 'something'}, {'c' : 'else'},
{'a' : '2'}, {'b' : 'anything'}, {'c' : 'if'},
{'a' : '3'}, {'b' : 'nothing'}, {'c' : 'matters'}]

如您所见,我已经分离了词典,但是我想合并它们。条件是,当字典名称再次出现时,它应该是一个单独的字典。像这样:

list_of_dict = 
[{'a' : '1', 'b' : 'something', 'c' : 'else'},
{'a' : '2', 'b' : 'anything', 'c' : 'if'},
{'a' : '3', 'b' : 'nothing', 'c' : 'matters'}]

我一直在尝试使用dict(ChainMap(*list_of_dict),但这只会返回:

{'c': 'else', 'b': 'something', 'a': '1'}

我在想也许使用 for 循环来解决我的问题,但我不知道如何开始。你们有什么想法吗?

这可以通过 for 循环来完成,遍历list_of_dict并检查字典中的键是否在返回列表中的最新字典中。如果没有,请使用**运算符将其附加到最新字典以合并字典,否则在返回列表中启动一个新字典。

法典:

list_of_dict = [{'a' : '1'}, {'b' : 'something'}, {'c' : 'else'},
{'a' : '2'}, {'b' : 'anything'}, {'c' : 'if'},
{'a' : '3'}, {'b' : 'nothing'}, {'c' : 'matters'}]
rv = [{}]
for d in list_of_dict:
if list(d)[0] not in rv[-1]:
rv[-1] = {**rv[-1], **d}
else:
rv.append(d)

输出:

>>> rv
[{'a': '1', 'b': 'something', 'c': 'else'},
{'a': '2', 'b': 'anything', 'c': 'if'},
{'a': '3', 'b': 'nothing', 'c': 'matters'}]

相关内容

最新更新