Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 如何将压缩列表中的键:值对添加到多个子字典中_Python_Python 3.x_Dictionary_Nested - Fatal编程技术网

Python 如何将压缩列表中的键:值对添加到多个子字典中

Python 如何将压缩列表中的键:值对添加到多个子字典中,python,python-3.x,dictionary,nested,Python,Python 3.x,Dictionary,Nested,我正在尝试将值列表分配给嵌套字典中的键 我的结构是dictionary={key1:{key2:list} 我使用以下代码创建字典 surfDict = {} for i in range(1, number_of_cells + 1): surfDict["surf"+str(i)] = {} 在本例中,我有5个单元格,因此在主字典中生成5个key1 接下来,我准备下一级词典。我有一个名为framesList的框架列表,它将用作键2。然后我有一个自包含

我正在尝试将值列表分配给嵌套字典中的键

我的结构是dictionary={key1:{key2:list}

我使用以下代码创建字典

surfDict = {}

for i in range(1, number_of_cells + 1):
        
surfDict["surf"+str(i)] = {}
在本例中,我有5个单元格,因此在主字典中生成5个key1

接下来,我准备下一级词典。我有一个名为framesList的框架列表,它将用作键2。然后我有一个自包含的值列表,包含我感兴趣的3个值

这两个列表是按顺序排列的,所以如果我压缩它们,我会在字典中配对我想要的key2:value对

我的问题是我的framesList(newIntFramesList)包含26个整数的5个重复。例如[1,1,1,1,1,2,2,2,2,3,3,3,3,3……等等]

我的价值列表的结构如下[[x,y,z],[x,y,z],[x,y,z],[x,y,z],[x,y,z],[x,y,z],[x,y,z]等]

我想将framesList中的每个整数添加为我的值列表的键2,并将所有这些单独的字典包含在每个键1中

但是,我只希望在每个字典中有一个框架及其对应的值列表。例如{{surf1:{1:[x,y,z]},{2:[x,y,z]},{3:[x,y,z]},{4:[x,y,z]}等},{surf2:{1:[x,y,z]},{2:[x,y,z]},{3:[x,y,z]},{4:[x,y,z]}等}

为此,我尝试了以下代码:

对于范围内的i(1,单元数+1):

然而,这似乎不起作用。它为我提供了surf1字典中正确的值列表集。但是,其余4个字典都包含来自我的数据的最后一组值列表。我也尝试过其他的方法,但这是我得到的最接近的结果


抱歉如果这看起来很复杂,我会尽可能多地提供细节以避免含糊不清。

我不确定我是否完全理解:

下面是“外部”字典(
number\u of\u cells=3
,以使其更易于评估):

以下是
newIntFrameslst
surfValueslst
的示例(两者都较小,原因相同):

那么这个

for i, (frame, value) in enumerate(zip(newIntFrameslst, surfValueslst)):
    surfDict["surf" + str((i % number_of_cells) + 1)][frame] = value
导致

surfDict = {
 'surf1': {1: [0, 1, 2], 2: [9, 10, 11], 3: [18, 19, 20], 4: [27, 28, 29], 5: [36, 37, 38], 6: [45, 46, 47], 7: [54, 55, 56]},
 'surf2': {1: [3, 4, 5], 2: [12, 13, 14], 3: [21, 22, 23], 4: [30, 31, 32], 5: [39, 40, 41], 6: [48, 49, 50], 7: [57, 58, 59]},
 'surf3': {1: [6, 7, 8], 2: [15, 16, 17], 3: [24, 25, 26], 4: [33, 34, 35], 5: [42, 43, 44], 6: [51, 52, 53], 7: [60, 61, 62]}
}

这就是你要找的吗?(这与您上面描述的预期结果有点不同。但我认为您的描述不正确,因为这种对象是不可能的。)

您能举一个
newIntFrameslst
surfValueslst
的小例子吗?对不起。NewIntFramesList是我在帖子中提到的框架列表,而SurfValuesList是价值列表列表。x,y,z是浮点数。如果有道理的话,那太好了。正是我需要的。从未想过使用模运算符!谢谢
surfDict = {'surf1': {}, 'surf2': {}, 'surf3': {}}
newIntFrameslst = [i for i in range(1, 8) for _ in range(number_of_cells)]
surfValueslst = [[i+j for j in range(3)] for i in range(0, number_of_cells * 21, 3)]
[1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7]

[[0, 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, 37, 38],
 [39, 40, 41], [42, 43, 44], [45, 46, 47], [48, 49, 50], [51, 52, 53], [54, 55, 56],
 [57, 58, 59], [60, 61, 62]]
for i, (frame, value) in enumerate(zip(newIntFrameslst, surfValueslst)):
    surfDict["surf" + str((i % number_of_cells) + 1)][frame] = value
surfDict = {
 'surf1': {1: [0, 1, 2], 2: [9, 10, 11], 3: [18, 19, 20], 4: [27, 28, 29], 5: [36, 37, 38], 6: [45, 46, 47], 7: [54, 55, 56]},
 'surf2': {1: [3, 4, 5], 2: [12, 13, 14], 3: [21, 22, 23], 4: [30, 31, 32], 5: [39, 40, 41], 6: [48, 49, 50], 7: [57, 58, 59]},
 'surf3': {1: [6, 7, 8], 2: [15, 16, 17], 3: [24, 25, 26], 4: [33, 34, 35], 5: [42, 43, 44], 6: [51, 52, 53], 7: [60, 61, 62]}
}