Python 来自多个列表的嵌套字典
我有一个API,它接受两组列表,并返回对应值的元素的单数列表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
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(字段、数据))