簡體   English   中英

將python列表轉換成字典並添加具有相同鍵的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM