[英]Python make list of dicts from list of tuples
从数据库中,我得到以下格式的结果:
result = ([('A', 210L), ('B', 1L), ('C', 269L)], 3)
我需要在Python中将其更改为:
[{'description':'A','sum':210},{'description':'B','sum':1},{'description':'C','sum':269}]
我尝试了各种选择,但没有得到我所需要的。
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
结果是:
[{'description':'C','sum':269},{'description':'C','sum':269},{'description':'C','sum':269}]
因此,在步骤all_descriptions_sums.append(description_sum)
,字典不仅被追加到列表中,而且还重写了先前的值。
非常感谢您的帮助!
您可以只使用列表理解:
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
您需要将description_sum移至for循环。
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)
您还可以使用列表理解功能,使其更清晰,如其他答案所建议的那样。
以下代码将解决您的问题:
# Input data
result = ([('A', 210L), ('B', 1L), ('C', 269L)], 3)
# Result list
list_result = []
# The input is:
# - a 2-tuple containing:
# - a list of 2-tuples with (database field) values
# - length of the list ("number of rows returned")
# Therefore we iterate the first member of the outermost 2-tuple
for item in result[0]:
# Long version for clarity:
d = dict()
d['description'] = item[0]
d['sum'] = int(item[1])
list_result.append(d)
# The short version:
# list_result.append({'description': item[0], 'sum': int(item[1])})
一旦您对以上内容感到满意,我们可以将以上所有内容缩短为仅两行:
# Input data
result = ([('A', 210L), ('B', 1L), ('C', 269L)], 3)
# Reformat to dicts with field names as keys
rows = [{'description': a, 'sum': b} for a,b in result[0]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.