![](/img/trans.png)
[英]Python : Dictionary with one key and multiple values : How to get list of keys having same SET of values?
[英]Convert python list into dictionary and adding values having same keys
datalist = [[868, 'S00086', 640.80, 38.45], [869, 'S00087', 332.31, 19.94], [869, 'S00087', 144.00, 8.64],]
如何將數據列表轉換為分配鍵的字典[868,869]並在具有相似鍵值的內部列表的索引2和3處添加值,即332.31,144.00和19.94,8.64
As Result would be : datadiict{868:['S00086', 640, 38.45], 869:['S00087', 476.31, 28.58]}
請提出有效的解決方案,提前致謝
您可以使用itertools.groupby()
在每個子列表的第一項上分組:
from itertools import groupby
datalist = [[868, 'S00086', 640.80, 38.45], [869, 'S00087', 332.31, 19.94], [869, 'S00087', 144.00, 8.64],]
datadict = {}
for k, group in groupby(sorted(datalist), key=lambda x: x[0]):
for v in group:
if k not in datadict:
datadict[k] = v[1:]
else:
datadict[k][1] += v[2]
datadict[k][2] += v[3]
print(datadict) # {868: ['S00086', 640.8, 38.45], 869: ['S00087', 476.31, 28.580000000000002]}
使用itertools.groupby()
和sum()
函數的解決方案:
import itertools
datalist = [[868, 'S00086', 640.80, 38.45], [869, 'S00087', 332.31, 19.94], [869, 'S00087', 144.00, 8.64]]
result = {}
# grouping inner lists by the 1st item value
for k,g in itertools.groupby(sorted(datalist), key=lambda x: x[0]):
g = list(g)
# summing up values for grouped items
result[k] = g[0][1:] if len(g) == 1 else [g[0][1], sum(i[2] for i in g), sum(i[3] for i in g)]
print(result)
輸出:
{868: ['S00086', 640.8, 38.45], 869: ['S00087', 476.31, 28.580000000000002]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.