Python从元组列表生成dict列表

2024-04-27 04:52:01 发布

您现在位置:Python中文网/ 问答频道 /正文

从数据库中,我得到了以下格式的结果:

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)中,字典不仅会附加到列表中,而且还会重写以前的值。。你知道吗

非常感谢你的帮助!你知道吗


Tags: in数据库forlen格式rangedescriptionresult
3条回答

以下代码将解决您的问题:

# 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]]

您需要将描述和移动到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)

你可以使用列表理解,让它更清楚,因为其他答案建议。你知道吗

你可以使用列表理解:

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

相关问题 更多 >