删除dict中的重复项并将列表值附加到一个键

时间:2015-10-26 19:27:27

标签: python dictionary duplicates

我有一个这样的词典列表:

[{'name': 'comet1', 'coordinates': [15.01234516, 10.12345612]},
{'name': 'comet2', 'coordinates': [11.45678762, 12.56789876]},
{'name': 'comet3', 'coordinates': [13.31512314, 14.68123912]},
{'name': 'comet3', 'coordinates': [10.78876782, 11.23234321]}]

我尝试删除重复的名称,并将相应的坐标值仅附加到一个名称。所以列表可以是

[{'name': 'comet1', 'coordinates': [15.01234516, 10.12345612]},
{'name': 'comet2', 'coordinates': [11.45678762, 12.56789876]},
{'name': 'comet3', 'coordinates': [13.31512314, 14.68123912, 10.78876782, 11.23234321]}]

以上数据是从外部文件获取的,并重新构建为此格式。使用defaultdict和其他方法后,我不太清楚如何实现这一点。

这是我的尝试(逻辑错误在第二个for循环中。)

content = []
comets = {"name":comet_name, "coordinates":coordinates}
    content.append(comets)
new_d = {}
for x in content:
    for name in names: #names is a set containing all indivual comet names
        if x["name"] == name:
            print(x["name"])
            new_d = {"name":name, "coordinates": x["coordinates"].append(coordinates)

2 个答案:

答案 0 :(得分:1)

我可能会使用defaultdict来收集坐标。这些方面的东西:

from collections import defaultdict

result = defaultdict(list)

for comet in initiallist:
  result[comet['name']].extend(comet['coordinates'])
  # Or for a list of tuples
  result[comet['name']].append(tuple(comet['coordinates']))

这应该产生你所追求的结果(我可以告诉你)。

答案 1 :(得分:0)

我将假设你有足够的这些来处理你的源列表中的单个传递更好。此外,您仍然需要词典列表。

SET_ATTITUDE_TARGET

这应该会在comet_list中为每个彗星名称提供一个扁平的坐标列表。