从多个列表创建一个字典,一个列表作为键,另一个作为值

Create a dictionary from multiple lists, one list as key, other as value

假设我有这些列表:

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))

使用 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 值元组的迭代器:

Otherwise, the positional argument must be an iterable object. Each item in the iterable must itself be an iterable with exactly two objects. The first object of each item becomes a key in the new dictionary, and the second object the corresponding value.

在我上面的示例中,我使用列表理解在单个表达式中生成整个输出列表:

>>> 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() 是错误的工具,因为它 重复使用 每个键的第二个参数。