【问题标题】:Convert python list into dictionary and adding values having same keys将python列表转换为字典并添加具有相同键的值
【发布时间】:2017-08-18 05:27:53
【问题描述】:
datalist = [[868, 'S00086', 640.80, 38.45], [869, 'S00087', 332.31, 19.94], [869, 'S00087', 144.00, 8.64],]

如何将 datalist 转换为分配键 [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]}

请提出有效的解决方案,在此先感谢

【问题讨论】:

  • 介意展示你尝试过的内容吗?

标签: python list dictionary


【解决方案1】:

您可以使用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]}

【讨论】:

  • 作为使用说明,OrderedDict。
【解决方案2】:

使用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]}

【讨论】:

  • 感谢您的建议,得到想要的结果(Y)
猜你喜欢
  • 1970-01-01
  • 2019-11-18
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多