我有以下形式的 OrderedDicts 串列:
[OrderedDict([('id', 1), ('created_at', '15-04-2022 10:27:37'), ('dr_notice_period', 15), ('dr_duration', 30), ('dr_request', 1000.0), ('user_id_event', None)]), OrderedDict([('id', 2), ('created_at', '15-04-2022 10:27:37'), ('dr_notice_period', 15), ('dr_duration', 30), ('dr_request', 1000.0), ('user_id_event', 1)])]
我想操作上面的串列并產生以下形式的輸出:
[
{
"number": 0,
"created_at": "15-04-2022 10:27:37",
"dr_notice_period": 15,
"dr_duration": 30,
"dr_request": 1000.0
},
{
"number": 1,
"created_at": "15-04-2022 10:27:37",
"dr_notice_period": 15,
"dr_duration": 30,
"dr_request": 1000.0
}
]
我現在正在做的是使用兩個 for 回圈來遍歷所有元素并創建輸出串列:
output = []
for i in range(len(input)):
temp = {}
for key, value in input[i].items():
temp["number"] = i
if key == "dr_notice_period":
temp[key] = value
if key == "dr_duration":
temp[key] = value
if key == "dr_request":
temp[key] = value
if key == "created_at":
temp[key] = value
output.append(temp)
通過避免嵌套的 for 回圈,是否有更好、更有效的方法來做到這一點?
uj5u.com熱心網友回復:
字典的使用update方法。
lst = [OrderedDict([('id', 1), ('created_at', '15-04-2022 10:27:37'), ('dr_notice_period', 15), ('dr_duration', 30), ('dr_request', 1000.0), ('user_id_event', None)]), OrderedDict([('id', 2), ('created_at', '15-04-2022 10:27:37'), ('dr_notice_period', 15), ('dr_duration', 30), ('dr_request', 1000.0), ('user_id_event', 1)])]
output = []
for i, ordict in enumerate(lst):
item = {'number': i}
item.update(ordict)
item.pop('id')
output.append(item)
print(output)
如果您不需要將 'id' 更改為 'number' 及其值,則更簡單:
output = [dict(item) for item in lst]
print(output)
uj5u.com熱心網友回復:
我可以提出以下解決方案:
from collections import OrderedDict
l = [OrderedDict([('id', 1), ('created_at', '15-04-2022 10:27:37'), ('dr_notice_period', 15), ('dr_duration', 30), ('dr_request', 1000.0), ('user_id_event', None)]),
OrderedDict([('id', 2), ('created_at', '15-04-2022 10:27:37'), ('dr_notice_period', 15), ('dr_duration', 30), ('dr_request', 1000.0), ('user_id_event', 1)])]
crits = ["dr_notice_period", "dr_duration", "dr_request", "created_at"] # extendable
temp = [dict({"number":num}, **{k:v for k,v in i.items() if k in crits})
for num, i in enumerate(l, start=1)]
from pprint import pprint
pprint(temp)
結果:
[{'created_at': '15-04-2022 10:27:37',
'dr_duration': 30,
'dr_notice_period': 15,
'dr_request': 1000.0,
'number': 1},
{'created_at': '15-04-2022 10:27:37',
'dr_duration': 30,
'dr_notice_period': 15,
'dr_request': 1000.0,
'number': 2}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/462981.html
