如何递归更新列表

Fel*_*sén 8 python

我有一个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.

有任何想法吗?

mad*_*ad_ 7

迭代和就地解决方案

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)