Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在dict理解中将每n个元素设置为dict值_Python_Dictionary_Dictionary Comprehension - Fatal编程技术网

Python 如何在dict理解中将每n个元素设置为dict值

Python 如何在dict理解中将每n个元素设置为dict值,python,dictionary,dictionary-comprehension,Python,Dictionary,Dictionary Comprehension,例如: data_1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36] data_2 = ['key1','key2','key3','key4','key5','key6','key7','key8','key9','key10','key11','key12'] data_3 = {'123':{'a':1},'222':{'b':2},

例如:

data_1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]
data_2 = ['key1','key2','key3','key4','key5','key6','key7','key8','key9','key10','key11','key12']
data_3 = {'123':{'a':1},'222':{'b':2}, '333':{'b':3}}
我需要设置此列表以根据下一个条件记录密钥,数据_1中的每12个元素应为数据_2中每个密钥的值,此记录应为数据3中密钥的值

预期产出:

{'123':{'key1':1,'key2':2,'key3':3,'key4':4,'key5':5,'key6':6,'key7':7,'key8':8,'key9':9,'key10':10,'key11':11,'key12':12},
{'222':{'key1':13,'key2':14,'key3':15,'key4':16,'key5':17,'key6':18,'key7':19,'key8':20,'key9':21,'key10':22,'key11':23,'key12':24},
{'333':{'key1':25,'key2':26,'key3':27,'key4':28,'key5':29,'key6':30,'key7':31,'key8':32,'key9':33,'key10':34,'key11':35,'key12':36}
我的尝试:

    result = {
        key: dict(zip(data_2,data_1) for key, value in data_3.items()
    }
我的结果是:

{'123': {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5, 'key6': 6, 'key7': 7, 'key8': 8, 'key9': 9, 'key10': 10, 'key11': 11, 'key12': 12}, '222': {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5, 'key6': 6, 'key7': 7, 'key8': 8, 'key9': 9, 'key10': 10, 'key11': 11, 'key12': 12}, '333': {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5, 'key6': 6, 'key7': 7, 'key8': 8, 'key9': 9, 'key10': 10, 'key11': 11, 'key12': 12}}
我理解这部分陈述中的错误:

键:dictzipdata_2,data_1


如何达到我期望的结果?

一种方法是使用这样一个事实,即,将只迭代,直到较小的iterable被使用,因此您可以执行以下操作:

iterable_data1 = iter(data_1)

result = {key: dict(zip(data_2, iterable_data1)) for key in data_3}

for key, value in result.items():
    print(key, value)
这非常有效,因为它不会创建任何附加列表。此外,您还可以:

result = {key: dict(zip(data_2, data_1[12 * i:])) for i, key in enumerate(data_3)}

for key, value in result.items():
    print(key, value)
输出


第二种方法的思想是,对于数据中的每个键,将数据的指针移动12个位置。

一种方法是使用这样一个事实,即,只会迭代,直到消耗较小的iterable,因此您可以执行以下操作:

iterable_data1 = iter(data_1)

result = {key: dict(zip(data_2, iterable_data1)) for key in data_3}

for key, value in result.items():
    print(key, value)
这非常有效,因为它不会创建任何附加列表。此外,您还可以:

result = {key: dict(zip(data_2, data_1[12 * i:])) for i, key in enumerate(data_3)}

for key, value in result.items():
    print(key, value)
输出

第二种方法的思想是,对于数据_3中的每个键,将数据_1的指针移动12个位置