我有字典
dicte = [{'value':3, 'content':'some_string'}, {'value':4, 'content':'some_string1'}, {'value':4, 'content':'some_string2'}, {'value':4, 'content':'some_string3'}, {'value':4, 'content':'some_string4'}, {'value':5, 'content':'some_string5'}]
我希望能夠對該字典進行操作,以便將所有content具有相同鍵值"value"的字典重新組合并基于該字典生成另一個字典
這里的結果應該是
new_dicte = [{'value':3, 'content':['some_string']}, {'value':4, 'content':['some_string1', 'some_string2', 'some_string3', 'some_string4']}, {'value':5, 'content':['some_string5']}]
執行此操作的最佳 Pythonic 方法是什么?
uj5u.com熱心網友回復:
“Pythonic”是有爭議的,但您可以構建一個中間字典來按值分組:
grouped_by_value = {}
for item in dicte:
if item["value"] not in grouped_by_value:
grouped_by_value[item["value"]] = []
grouped_by_value[item["value"]].append(item["content"])
new_dicte = [{"value": key, "content": val} for key, val in grouped_by_value.items()]
在元素的順序new_dicte 串列將是該值在遇到的順序dicte 串列,假設你使用的是Python版本,其中型別的字典由插入順序排序。
如果您想保證 的特定排序new_dicte,您可以對 的專案進行排序grouped_by_value.items(),例如,通過增加“值”鍵。
uj5u.com熱心網友回復:
這是使用dict.setdefault方法收集的一種方法value-content配對并稍后解包:
out = {}
for d in dicte:
out.setdefault(d['value'],[]).append(d['content'])
new_dicte = list(map(lambda x: dict(zip(('value','content'), x)), out.items()))
這是另一種不使用中間字典的方法:
out = {}
for d in dicte:
if d['value'] not in out:
out[d['value']] = {'value':d['value'], 'content':[d['content']]}
else:
out[d['value']]['content'].append(d['content'])
new_dicte = list(out.values())
輸出:
[{'value': 3, 'content': ['some_string']},
{'value': 4,
'content': ['some_string1', 'some_string2', 'some_string3', 'some_string4']},
{'value': 5, 'content': ['some_string5']}]
uj5u.com熱心網友回復:
最佳Python化是值得商榷的,但我會親自去這樣的事情,
import itertools
from collections import defaultdict
resp = defaultdict(list)
for key,group in itertools.groupby(d, key=lambda x: x["value"]):
for thing in group:
resp[key].append(thing.get("content"))
print(resp)
輸出(可以調整到我們想要的方式......)
{3: ['some_string'],
4: ['some_string1', 'some_string2', 'some_string3', 'some_string4'],
5: ['some_string5']}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/404568.html
標籤:
上一篇:動態迭代Python字典
