python - 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!
解决方案
您可以只使用列表理解:
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
推荐阅读
- reactjs - 我部署的站点看起来与本地版本不同
- flutter - 如何在颤动中使用 navigatorKey 传递值下一个屏幕?
- node.js - 使用附加调试 Typescript Node 应用程序
- javascript - 将 Array 中的字符串转换为数字,然后将它们全部相加以获得 JavaScript 中的总数
- python - 使用大图像集配置具有多个输入的 CNN
- android - 如何在使用 cmake 的 android 项目中使用 gmock 和 gtest
- javascript - 当主要提取的结果是循环中的特定值时,如何使用 JavaScript 等待次要提取的结果?
- javascript - 用户成功登录后如何将登录页面重定向到主页?
- java - 自从我将 Intellij IDEA Ultimate 从 2020.3 升级到 2021.1 后,为什么我的 Controller 中有很多错误消息?
- python - 使用 theads 多次调用函数