Python: 切换键值时新建字典

Python: Creating a new dictionary while switching keys and values

如果给我一个字典,其中以学生姓名为键,以他们精通的科目为一组字符串,我将如何创建一个新字典,以科目为键,每个人都是精通那些科目中的一组?

抱歉,这是我第一次在这里提问,所以我不太确定如何包含函数片段。

使用 defaultdict 使每个 subjects/values 中的每一个设置一个键,并且 append/add 每个学生都使用 list/set 作为值。

s = {'Sherman':{'calculus', 'english'},
 'Tyler': {'computers','history'},
'Kevin': {'chemistry','PE','geometry'},
'Joe': {'calculus','computers'},
'Bryan': {'nothing'},
'Steven': {'biology','research', 'algebra'}}

from collections import defaultdict
d = defaultdict(list)
for k,v in s.items(): # iterate over key/value tuples.
    for sub in v: # get each subject in the set/value
        d[sub].append(k) # add the students to a list and and make each subject a key
print(d)

 defaultdict(<type 'list'>, {'calculus': ['Sherman', 'Joe'], 'biology': ['Steven'], 'algebra': ['Steven'], 'geometry': ['Kevin'], 'computers': ['Tyler', 'Joe'], 'research': ['Steven'], 'english': ['Sherman'], 'nothing': ['Bryan'], 'chemistry': ['Kevin'], 'PE': ['Kevin'], 'history': ['Tyler']})

如果你想设置为值使用 defaultdict(set) 和 .add 而不是追加:

from collections import defaultdict

d = defaultdict(set)
for k,v in s.items():
    for sub in v:
        d[sub].add(k)
print(d)
 defaultdict(<type 'set'>, {'calculus': set(['Sherman', 'Joe']), 'biology': set(['Steven']), 'algebra': set(['Steven']), 'geometry': set(['Kevin']), 'computers': set(['Tyler', 'Joe']), 'research': set(['Steven']), 'english': set(['Sherman']), 'nothing': set(['Bryan']), 'chemistry': set(['Kevin']), 'PE': set(['Kevin']), 'history': set(['Tyler'])})

使用 defaultdict 意味着如果字典中不存在该键,则将添加该键并追加或仅追加该值(如果它已经存在),您可以使用 dict.setdefault 但 defaultdict 效率更高。