使用
zip()
function
将键列表与相应的值组合,然后传递
(key, value)
组合到
dict()
:
data = {"rows": [dict(zip(key_list, row)) for row in val_list]}
这是因为
zip(iter1, iter2)
将中的每个元素配对
iter1
和那些
iter2
,以及
dict()
constructor
接受2值元组的迭代器:
否则,位置参数必须是
iterable
对象iterable中的每个项本身必须是一个只包含两个对象的iterable。每个项的第一个对象成为新字典中的一个键,第二个对象成为相应的值。
在上面的示例中,我使用列表理解在单个表达式中生成整个输出列表:
>>> 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()
这里的工具不对吗
重复使用
每个键的第二个参数。