python - 如何根据 Python 中第一个列表的相同元素对 3 个相同大小的排序列表求和?

标签 python list dictionary sum iteration

我有一个 python dictionary,其中包含 3 个 lists,键分别为“time”、“power”和“usage”。 所有列表都具有相同数量的元素,并且所有列表都已排序。什么 我想做的是总结列表“功能”和“使用”的所有元素,它们的索引 对应列表'time'中的相同值,以便每个时间单位只有一个功率和使用样本。

例如转换这个字典:

{'time': [1, 2, 2, 3, 4, 4, 5],
 'power': [2, 2, 3, 6, 3, 3, 2],
 'usage': [0, 1, 1, 2, 1, 4, 7]}

这个:

{'time': [1, 2, 3, 4, 5],
 'power': [2, 5, 6, 6, 2],
 'usage': [0, 2, 2, 5, 7]}

我已经编写了这段有效的代码,但我不喜欢 这么多:

d = {'time':[1,2,2,3,4,4,5], 'power':[0,1,1,2,1,4,7], 'usage':[2,2,3,6,3,3,2]}
prev = -1
new_d = {'time':[], 'power': [], 'usage':[]}
indexes =  range( len(d['time']) )

for i in indexes:
  if d['time'][i]!=prev:
    new_d['time'].append(d['time'][i])
    new_d['power'].append(d['power'][i])
    new_d['usage'].append(d['usage'][i])
  else:
    last_power = len( new_d['power'] ) - 1
    last_usage = len( new_d['usage'] ) - 1
    new_d['power'][last_power]+=d['power'][i]
    new_d['usage'][last_usage]+=d['usage'][i]
  prev=d['time'][i]

print d
print new_d

有没有更简单、更全面的pythonian方法?

最佳答案

一个强大的解决方案,可以处理任意数量的额外字段 - 按“时间”字段排序(作为一种方法):

def aggregate(old_d, sort_key='time'):
    new_d = dict((k, []) for k in old_d)
    prev = None
    curr = None
    for i in range(len(old_d[sort_key])):
        curr = old_d[sort_key][i]
        for key, lst in new_d.iteritems(): # .items() in Python 3+
            if prev == curr:
                if key != sort_key:           
                    lst[-1] += old_d[key][i]
            else:
                lst.append(old_d[key][i])
        prev = curr
    return new_d

使用你的字典:

d = {'time': [1, 2, 2, 3, 4, 4, 5],
     'power': [2, 2, 3, 6, 3, 3, 2],
     'usage': [0, 1, 1, 2, 1, 4, 7]}

print aggregate(d)
>>>
{'usage': [0, 2, 2, 5, 7], 'power': [2, 5, 6, 6, 2], 'time': [1, 2, 3, 4, 5]}

关于python - 如何根据 Python 中第一个列表的相同元素对 3 个相同大小的排序列表求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15926358/

相关文章:

python - pandas multiindex 中设置值失败

python - 按顺序返回列表中的每个项目

c# - FindAll 搜索问题

java - 添加双链表方法(冒泡排序)

json - 嵌套字典转换为 json swift

python - 使用循环将列表转换为具有多个值的字典

python - 在部署的 Azure 虚拟机启动时运行自定义脚本

python - 如何在Python中搜索一行中的字符串并提取两个字符之间的数据?

python - 对于这个特定的任务来说,字典或元组列表会更有效吗?

c++ - STL 中的抽象 map 和 vector