問題描述
我有一個字典列表:
[{"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"}]
我希望最終結(jié)果是(我在檢查重復項時只考慮 id):
I'd like the end result to be (I am only considering the id when checking for duplicates):
[{"id":"1", "name":"Alice", "age":"25", "languages":"German, French"},
{"id":"2", "name":"John", "age":"30", "languages":"English, Spanish"}]
看著類似的問題,我認為使用集合可能是答案,但一直無法正確實現(xiàn).
looking at similar questions, I thought that using a set might be the answer, but haven't been able to implement it correctly.
提前感謝您的回答.
推薦答案
在這里有點冗長以幫助查看結(jié)構(gòu).絕對可以做一些很酷的 lambda 東西來解決這個問題,并使列表理解更加pythonic".但這里有一個快速的解決方案!
Being a little verbose here to help see the structure. Definitely some cool lambda stuff you can do to solve this and list comprehension to be more "pythonic". But here is a quick solution!
# 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)
然后給你你的最終輸出,其中清理的是你的合并條目列表:
And than gives you your final output where cleaned is your list of merged entries:
{'id': '1', 'name': 'Alice', 'age': '25', 'languages': 'German, French'}
{'id': '2', 'name': 'John', 'age': '30', 'languages': 'English, Spanish'}
謝謝,如果這有幫助,請告訴我!
Thank, and let me know if this helps!
這篇關(guān)于合并 id 重復的字典列表 - python3的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!