简体   繁体   中英

Group a list of tuples to dictionary in Python

I want to turn the list into a dict as follows:

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']}}

With a little sprinkling of dict.setdefault() that's not that hard:

result = {}

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

Demo:

>>> 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']}}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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