Python:在切换键和值时创建新词典

时间:2015-01-14 02:15:50

标签: python dictionary

如果我获得了一个字典,其中学生姓名为关键字,而且他们作为一组字符串精通的主题,我将如何创建一个新的字典,将主题作为键,每个人都是& #39;精通那些科目?

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

1 个答案:

答案 0 :(得分:4)

使用defaultdict使每组中的每个科目/值都成为一个键,并将每个学生附加/添加到列表/设置为值。

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

如果你想将sets设置为值,请使用defaultdict(set)和.add而不是append:

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中不存在该键,它将被添加并附加值,或者如果它已经存在则仅附加值,您可以使用dict.setdefault但是defaultdict更有效。