第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何將嵌套字典轉(zhuǎn)換為平面字典并使用重復(fù)鍵對(duì)值求和?

如何將嵌套字典轉(zhuǎn)換為平面字典并使用重復(fù)鍵對(duì)值求和?

溫溫醬 2022-05-24 13:05:09
這是我的字典:d = {'dicta':{'a':1,'b':2,'c':3}, 'dictb':{'a':2,'b':3,'c':1}, 'dictc':{'a':2,'b':5,'c':9,'d':10}}{'dicta': {'a': 1, 'b': 2, 'c': 3}, 'dictb': {'a': 2, 'b': 3, 'c': 1}, 'dictc': {'a': 2, 'b': 5, 'c': 9, 'd': 10}}我想要做的是將這些嵌套的字典組合成一個(gè)扁平的字典,并將這些值相加得到:{'a': 5, 'b': 10, 'c': 13, 'd': 10}我已經(jīng)可以使用以下代碼實(shí)現(xiàn)這一點(diǎn):out = {}for k,v in [[k2,d[k1][k2]] for k1 in d for k2 in d[k1]]:    if k in out.keys():        out[k] = out[k] + v    else:        out[k] = v但是,如您所見(jiàn),它不是很優(yōu)雅。肯定有更好的辦法?。ɡ酌傻隆ずM⒏瘢篋)。我也可以做一個(gè)字典理解,顯然每個(gè)鍵只保留一個(gè)條目:out = {k2:d[k1][k2] for k1 in d for k2 in d[k1]}輸出:{'a': 2, 'b': 5, 'c': 9, 'd': 10}或者至少給我想要組合的所有內(nèi)容的列表理解:out = [{k2:d[k1][k2]} for k1 in d for k2 in d[k1]]輸出:[{'a': 1}, {'b': 2}, {'c': 3}, {'a': 2}, {'b': 3}, {'c': 1}, {'a': 2}, {'b': 5}, {'c': 9}]這感覺(jué)就像我越來(lái)越接近......有沒(méi)有辦法以我不知道的非常優(yōu)雅的方式以我想要的方式組合這些?類似的東西:out = {k2:d[k1][k2] for k1 in d for k2 in d[k1] with combined = True}(顯然沒(méi)有意義,但為了說(shuō)明這一點(diǎn))尋找最干凈的方法來(lái)做到這一點(diǎn)
查看完整描述

2 回答

?
冉冉說(shuō)

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊

另一種使用方式collections.Counter:


from collections import Counter


sum(map(Counter, d.values()), Counter())

輸出:


Counter({'a': 5, 'b': 10, 'c': 13, 'd': 10})


查看完整回答
反對(duì) 回復(fù) 2022-05-24
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以使用collections.defaultdict:


from collections import defaultdict

d = {'dicta':{'a':1,'b':2,'c':3}, 'dictb':{'a':2,'b':3,'c':1}, 'dictc':{'a':2,'b':5,'c':9,'d':10}}

_d = defaultdict(int)

for a in d.values():

  for c, j in a.items():

     _d[c] += j


print(dict(_d))

輸出:


{'a': 5, 'b': 10, 'c': 13, 'd': 10}

使用更短的解決方案itertools.groupby:


from itertools import groupby

r = sorted([i for b in d.values() for i in b.items()], key=lambda x:x[0])

result = {a:sum(c for _, c in b) for a, b in groupby(r, key=lambda x:x[0])}

輸出:


{'a': 5, 'b': 10, 'c': 13, 'd': 10}


查看完整回答
反對(duì) 回復(fù) 2022-05-24
  • 2 回答
  • 0 關(guān)注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)