Python从元组列表中生成dicts列表

nel*_*Zka 1 python dictionary tuples list python-2.7

从数据库我得到格式的结果:

result = ([('A', 210L), ('B', 1L), ('C', 269L)], 3)
Run Code Online (Sandbox Code Playgroud)

我需要在Python中将其更改为:

[{'description':'A','sum':210},{'description':'B','sum':1},{'description':'C','sum':269}]
Run Code Online (Sandbox Code Playgroud)

我尝试了各种选择,但没有得到我需要的东西..

rows = len(result[0])
description_sum = {}
all_descriptions_sums = []
for i in range(rows):
    description_sum['description'] = result[0][i][0]
    description_sum['sum'] = int(result[0][i][1])
    all_descriptions_sums.append(description_sum)
return all_descriptions_sums
Run Code Online (Sandbox Code Playgroud)

它导致:

[{'description':'C','sum':269},{'description':'C','sum':269},{'description':'C','sum':269}]
Run Code Online (Sandbox Code Playgroud)

因此,在该步骤中all_descriptions_sums.append(description_sum),字典不仅仅附加到列表中,而且还重写了先前的值.

非常感谢你的帮助!

ksb*_*sbg 6

你可以使用列表理解:

result = [{'description': a, 'sum': int(b)} for a, b in result[0]]
Run Code Online (Sandbox Code Playgroud)

但是如果你不想,你的代码中有什么问题,就是你在循环之前初始化字典.您必须在每次迭代中重新声明它,如:

rows = len(result[0])
all_descriptions_sums = []
for i in range(rows):
    description_sum = {}
    description_sum['description'] = result[0][i][0]
    description_sum['sum'] = int(result[0][i][1])
    all_descriptions_sums.append(description_sum)
return all_descriptions_sums
Run Code Online (Sandbox Code Playgroud)