id重复的词典合并列表-python3

id重复的词典合并列表-python3,python,list,dictionary,merge,duplicates,Python,List,Dictionary,Merge,Duplicates,我有一份字典清单: [{"id":"1", "name":"Alice", "age":"25", "languages":"German"}, {"id":"1", "name":"Alice", "age":"25", "languages":"French"}, {"id":"2", "name":"John", "age":"30", "languages":"English"}, {"id":"2", "name":"John", "age":"30", "languages":

我有一份字典清单:

[{"id":"1", "name":"Alice", "age":"25", "languages":"German"},
 {"id":"1", "name":"Alice", "age":"25", "languages":"French"},
 {"id":"2", "name":"John", "age":"30", "languages":"English"},
 {"id":"2", "name":"John", "age":"30", "languages":"Spanish"}]
我希望最终结果是(我只在检查重复项时考虑id):

看着类似的问题,我认为使用集合可能是答案,但没有能够正确地实现它


提前感谢您的回答

这里有点冗长,有助于了解结构。当然,你可以做一些很酷的lambda的东西来解决这个问题,并将理解列为更“pythonic”。但这里有一个快速的解决方案

# Set up initial data
unmerged = [
    {"id":"1", "name":"Alice", "age":"25", "languages":"German"},
    {"id":"1", "name":"Alice", "age":"25", "languages":"French"},
    {"id":"2", "name":"John", "age":"30", "languages":"English"},
    {"id":"2", "name":"John", "age":"30", "languages":"Spanish"}]

# merge the data by your composite key of id-name-age
merged = {}
for entry in unmerged:
    entry_id = entry['id']
    entry_name = entry['name']
    entry_age = entry['age']
    entry_languages = entry['languages']
    composite_key = entry_id + entry_name + entry_age
    if composite_key in merged:
        merged[composite_key]['languages'].append(entry_languages)
    else:
        merged[composite_key] = {
            'id': entry_id,
            'name': entry_name,
            'age': entry_age,
            'languages': [entry_languages]
        }

# reconstruct your list with just your unique entries
cleaned = []
for key, value in merged.items():
    print(key, value)
    cleaned.append({
        'id': value['id'],
        'name': value['name'],
        'age': value['age'],
        'languages': ', '.join(value['languages']) # string join langauges by ", "
    })

for clean in cleaned:
    print(clean)
然后提供最终输出,其中是合并条目列表:

{'id': '1', 'name': 'Alice', 'age': '25', 'languages': 'German, French'}
{'id': '2', 'name': 'John', 'age': '30', 'languages': 'English, Spanish'}

谢谢,如果有帮助请告诉我

谢谢你花时间,我很感激-它工作得很好。如果你接受这是正确的答案,请将其标记为已接受。谢谢
{'id': '1', 'name': 'Alice', 'age': '25', 'languages': 'German, French'}
{'id': '2', 'name': 'John', 'age': '30', 'languages': 'English, Spanish'}