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

标签 python dictionary

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

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

最佳答案

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

如果你想设置为值使用 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 更有效。

关于Python:在切换键和值时创建新字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27934810/

相关文章:

python - 我还是不明白内存观的意义

Python:比较不同深度的字典对的工具?

Python:如何正确打印字典中的对象键?

python - 在 Python 中浏览字典

python - 在python中装饰一个方法

python - 如何将一个函数的重写一般地应用于 python 中的多个类?

dictionary - 二郎字典

C++如何更改 map 元素的值

python - 对于一个跨 block 不执行翻译

python - 将数据框中相同的列值分组,并将相同值的总和添加为新列