繁体   English   中英

如何将3个列表合并到一个词典中(具有唯一元素)

[英]How To Merge 3 lists into one dictionary(with unique elements)

用Python写的代码

# Following Are The 3 Lists
sections = ['A', 'B', 'A', 'A', 'B']
students = ['Jack', 'Jim', 'Jack', 'Leena', 'Jim']
subjects = ['Maths', 'Biology', 'Chemistry', 'English', 'Physics']

# The Output Should Be A Dictionary
classDict = {'A':{'Jack' :{1:'Maths', 2:'Chemistry'}, 'Leena':{1:'English'}}, 'B':{'Jim':{1:'Biology', 2:'Physics'}}}

我可以将两个列表中的任何一个合并到一个字典中,只考虑前两个列表

classDict = {}   
for stu in students:  
    if not stu in classDict:     
        classDict[stu] = []    
    classDict[stu].append(stu)  

但是无法将其扩展到n(n = 3,对我而言)列表。

defualtdict和zip是您与此朋友的朋友:

我相信以下方法会起作用。

class_dict= defaultdict(lambda: defaultdict(lambda: defaultdict(str)))
for (section, stu, sub) in zip(sections, students, subjects):
    l = len(class_dict[section][stu])
    class_dict[section][stu][l+1] = sub

如果您确实想这样做,甚至可以一行完成。

from collections import defaultdict
from functools import partial
class_dict= defaultdict(partial(defaultdict,list))

for (section, student, subject) in zip(sections, students, subjects):
    class_dict[section][student].append(subject)

[ideone在这里: http ://ideone.com/4xpAI]

这与您请求的结构有不同的结构,因为没有理由要用整数作为键对字典的引用,除非您实现的是稀疏数组(即使这样,还有更好的选择)。 如果确实需要,可以将列表转换为字典。 列表已经由整数键入。

对于那些不知道的人,python类型是可调用的,因此将对象创建包装在lambda中是多余的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM