首页 > 解决方案 > Python make list of dicts from list of tuples

问题描述

from database I got result in format:

result = ([('A', 210L), ('B', 1L), ('C', 269L)], 3)

I need to change it in Python to:

[{'description':'A','sum':210},{'description':'B','sum':1},{'description':'C','sum':269}]

I tried various options but did not get what I needed..

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

It results in:

[{'description':'C','sum':269},{'description':'C','sum':269},{'description':'C','sum':269}]

So in the step all_descriptions_sums.append(description_sum) the dictionary is not just appended to the list, but it also rewrites the previous value..

Thank you so much for help!

标签: pythonpython-2.7listdictionarytuples

解决方案


您可以只使用列表理解:

result = [{'description': a, 'sum': int(b)} for a, b in result[0]]

但是,如果您不想这样做,那么代码中的问题是您在循环之前初始化了字典。您必须在每次迭代中重新声明它,如下所示:

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

推荐阅读