[英]How To Merge 3 lists into one dictionary(with unique elements)
# 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.