我有像这样的词组列表:
vector<>
并希望创建一个新列表,如:
list_of_dict = [{},
{'a': 2},
{'a': 3},
{'b': 2, 'c': 4}]
如果dicts没有键交叉或者相交键的值相同,则组合dicts。
我选择第一对,检查相交的键(如果交叉点则为值)然后删除该对并替换为新的dict。我应该什么时候停止?
new_list = [{'a': 2, 'b': 2, 'c':4},
{'a': 3}]
2.7
的解决方案list_of_dict = [{},
{'a': 2},
{'a': 3},
{'b': 2, 'c': 4}]
keys_a = set(list_of_dict[0].keys())
keys_b = set(list_of_dict[1].keys())
intersection = keys_a & keys_b
while ??:
if not intersection or //check intersected is equal//:
list_of_dict[0].update(list_of_dict[1])
list_of_dict.pop(1)
print list_of_dict
答案 0 :(得分:3)
这是一个解决方案,检查缓冲区中是否存在当前字典中的任何键,如果是,则创建新的列表条目,否则它将当前字典与缓冲区合并:
dcts = []
buffer = {}
for i in list_of_dict:
if any(j in buffer for j in i.keys()):
dcts.append(buffer)
buffer = i
else:
buffer = {**i, **buffer}
dcts.append(buffer)
print(dcts)
输出:
[{'a': 2}, {'b': 2, 'c': 4, 'a': 3}]