2014-02-27 38 views
1

到字典中我想将列表转换成一个字典如下:组元组的列表在Python

somelist = [("facultyX", "memberA", "Student"), 
      ("facultyX", "memberB", "Student"), 
      ("facultyX","memberC", "Programmer"), 
      ("facultyY", "memberD", "Student"), 
      ("facultyY", "memberE","PostDoc")] 

result = {'facultyX':{'Student':['memberA','memberB'], 
         'Programmer':['memberC']}, 
      'facultyY':{'Student':['memberD'], 
         'PostDoc':['memberE']}} 
+0

不要使用'list'和'dict'作为变量名;你掩盖了内置的类型。来自输入的'facultyA'数据发生了什么? –

+0

非常感谢Martijin!我尝试类似res = defaultdict(list)时会遇到错误,但从未明白原因。我会记住它,绝对不会在将来使用list和dict作为变量名称。我错误地为教师X选了一个教师队伍;应该只有facultyX和facultyY。 – back4good

回答

5

随着dict.setdefault()有点洒这并不难:

result = {} 

for fac, member, role in yourlist: 
    fac_data = result.setdefault(fac, {}) 
    fac_data.setdefault(role, []).append(member) 

演示:

>>> somelist = [("facultyX", "memberA", "Student"), 
...    ("facultyX", "memberB", "Student"), 
...    ("facultyX","memberC", "Programmer"), 
...    ("facultyY", "memberD", "Student"), 
...    ("facultyY", "memberE","PostDoc")] 
>>> result = {} 
>>> for fac, member, role in somelist: 
...  fac_data = result.setdefault(fac, {}) 
...  fac_data.setdefault(role, []).append(member) 
... 
>>> from pprint import pprint 
>>> pprint(result) 
{'facultyX': {'Programmer': ['memberC'], 'Student': ['memberA', 'memberB']}, 
'facultyY': {'PostDoc': ['memberE'], 'Student': ['memberD']}}