Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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 - Fatal编程技术网

Python 来自多个列表的嵌套字典

Python 来自多个列表的嵌套字典,python,Python,我有一个API,它接受两组列表,并返回对应值的元素的单数列表 Symbol = ['A','B','C','D','E','F','G','H','I'] Field = ['J','K','L','M'] 将返回如下列表: [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] 需要将其构造到嵌套字典中,如下所示: {'A': {'J': 0, 'K

我有一个API,它接受两组列表,并返回对应值的元素的单数列表

Symbol = ['A','B','C','D','E','F','G','H','I']
Field = ['J','K','L','M']
将返回如下列表: [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]

需要将其构造到嵌套字典中,如下所示:

{'A': {'J': 0, 'K': 1, 'L': 2, 'M': 3},
 'B': {'J': 4, 'K': 5, 'L': 6, 'M': 7},
 'C': {'J': 8, 'K': 9, 'L': 10, 'M': 11},
 'D': {'J': 12, 'K': 13, 'L': 14, 'M': 15},
 'E': {'J': 16, 'K': 17, 'L': 18, 'M': 19},
 'F': {'J': 20, 'K': 21, 'L': 22, 'M': 23},
 'G': {'J': 24, 'K': 25, 'L': 26, 'M': 27},
 'H': {'J': 28, 'K': 29, 'L': 30, 'M': 31},
 'I': {'J': 32, 'K': 33, 'L': 34, 'M': 35}}
目前,我的代码是功能性的,如下所示,但是当符号或字段列表的大小增加到100个元素时,是否有一种更干净/更快的方法-因为这需要输入到另一个函数中,然后尽快刷新

Nested = {}
i=0
for symbol in Symbol:
    coll = {}
    for field in Field:
        coll[field] = Values[i]
        i += 1
    Nested[symbol] = coll
    

在数字列表上使用迭代器,并使用
next(…)
函数按顺序从中获取元素

symbols=['A','B','C','D','E','F','G','H','I']
字段=['J'、'K'、'L'、'M']
数据=[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]
数据=国际热核实验堆(数据)
嵌套={
符号:{字段:字段中字段的下一个(数据\u iter)}
对于符号中的符号
}

尽可能多地使用python的内置数据结构和方法,以便代码更具可读性,并保证性能

在这种情况下,您可以使用
product
函数生成所有数据对,并使用
defaultdict
保存数据

使用
defaultdict
的方法与使用
dict
的方法相同

Symbol=['A','B','C','D','E','F','G','H','I']
字段=['J'、'K'、'L'、'M']
来自itertools进口产品
从集合导入defaultdict
嵌套=默认dict(dict)
对于枚举(乘积(符号,字段))中的计数(符号,字段):
嵌套的[符号][字段]=计数
嵌套=dict(嵌套)

您可以使用
枚举
为嵌套dict理解中的两个列表生成索引,以计算和输出映射值:

{s: {f: i * len(Field) + j for j, f in enumerate(Field)} for i, s in enumerate(Symbol)}

Python的惯例是所有变量都是小写的(可能带有下划线),因此
符号
字段
嵌套的
。这些不是“两组列表”,它们是两个列表。可能有一种方法可以通过嵌套的字典理解来实现,但可读性不强。无论有多少元素,代码都是一样的。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,并且更有可能吸引更多的选票<代码>符号:dict(zip(字段、数据))