我有一个dicts列表:
a = [{'one': 1}, {'two': 2}, {'three': 3}, {'four': 4}, {'five': 5}]
Run Code Online (Sandbox Code Playgroud)
我想用所有余数的总和更新此列表中每个元素的值.(所以'one'会得到价值2+3+4+5).
所以它看起来像这样:
a = [{'one': 14}, {'two': 12}, {'three': 9}, {'four': 5}, {'five': 5}]
Run Code Online (Sandbox Code Playgroud)
'five' 是最后一个,所以它不会更新.
我不知道如何实现这一目标.我认为你构造一个函数,将自己称为recursivly类似于:
def recursive(a):
if len(a) == 1:
return list(a[0].values())[0]
else:
val = list(a[0].values())[0]
return val + recursive(a.pop(0))
Run Code Online (Sandbox Code Playgroud)
但我不确定这list(a[0].values())[0]是"最好的"方式.这也是一个KeyError: 0.
有任何想法吗?
迭代和就地解决方案
a = [{'one': 1}, {'two': 2}, {'three': 3}, {'four': 4}, {'five': 5}]
sum_so_far = 0
first_flag = False
for i in a[::-1]:
k,v = i.items()[0] #For Python 3 k,v = list(i.items())[0]
sum_so_far += v
if first_flag:
i[k] = sum_so_far # do not change the value at first
first_flag=True
Run Code Online (Sandbox Code Playgroud)
产量
[{'one': 15}, {'two': 14}, {'three': 12}, {'four': 9}, {'five': 5}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |