假設我有這些串列:
key_list = [key1, key2,.....,key20]
val_list = [[val1, val2,...,val20],[val1, val2,...,val20], [val1, val2,...,val20],....,[val1, val2,...,val20]]
我怎樣才能做到這一點,以便我可以使用第一個串列作為鍵,然后遍歷第二個串列中的每個串列并制作一個像這樣的字典:
{
"rows": [
{
"key1": "val1",
"key2": "val2",
.
.
.
"key20": "val20"
},
{
"key1": "val1",
"key2": "val2",
.
.
.
"key20": "val20"
},
{
"key1": "val1",
"key2": "val2",
.
.
.
"key20": "val20"
},
{
"key1": "val1",
"key2": "val2",
.
.
.
"key20": "val20"
},
.
.
.
{
"key1": "val1",
"key2": "val2",
.
.
.
"key20": "val20"
}
]
}
我試過這個,但它沒有給我想要的輸出:
data = []
for row in val_list:
t = dict.fromkeys(key_list, row)
data.append(t)
print(json.dumps(data, indent=4))
uj5u.com熱心網友回復:
使用該zip()函式將鍵串列與相應的值組合,然后將生成的(key, value)組合迭代器傳遞給dict():
data = {"rows": [dict(zip(key_list, row)) for row in val_list]}
這是有效的,因為將每個元素與 的zip(iter1, iter2)元素配對,并且建構式接受 2 值元組的迭代器:iter1iter2dict()
否則,位置引數必須是可迭代物件。可迭代物件中的每個專案本身必須是恰好具有兩個物件的可迭代物件。每個專案的第一個物件成為新字典中的鍵,第二個物件成為相應的值。
在上面的示例中,我使用串列推導在單個運算式中生成整個輸出串列:
>>> key_list = ['key1', 'key2', 'key3']
>>> val_list = [['v0_1', 'v0_2', 'v0_3'], ['v1_1', 'v1_2', 'v1_3'], ['v2_1', 'v2_2', 'v2_3']]
>>> {"rows": [dict(zip(key_list, row)) for row in val_list]}
{'rows': [{'key1': 'v0_1', 'key2': 'v0_2', 'key3': 'v0_3'}, {'key1': 'v1_1', 'key2': 'v1_2', 'key3': 'v1_3'}, {'key1': 'v2_1', 'key2': 'v2_2', 'key3': 'v2_3'}]}
>>> from pprint import pp
>>> pp({"rows": [dict(zip(key_list, row)) for row in val_list]})
{'rows': [{'key1': 'v0_1', 'key2': 'v0_2', 'key3': 'v0_3'},
{'key1': 'v1_1', 'key2': 'v1_2', 'key3': 'v1_3'},
{'key1': 'v2_1', 'key2': 'v2_2', 'key3': 'v2_3'}]}
dict.fromkeys()這里是錯誤的工具,因為它為每個鍵重用了第二個引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/469265.html
標籤:Python json python-3.x 字典
上一篇:撰寫VisualTransformationPhoneNumber以空格分隔每3個數字
下一篇:從字典中選擇錯誤的鍵
