python - 按字典中元组的元素组织?

标签 python dictionary lambda

我想按字典中元组的元素进行组织。

我正在编写一个组织元组元素的函数

grade = {'A+': 4.3, 'A': 4.0, 'A-': 3.7,
       'B+': 3.3, 'B': 3.0, 'B-': 2.7,
       'C+': 2.3, 'C': 2.0, 'C-': 1.7,
       'D+': 1.3, 'D': 1.0, 'D-': 0.7,
       'F' : 0.0}


subject = {'math':  {('Tom', 'A+'), ('Kevin','B+')},
       'History':  {('Kate', 'C+'),('Eric','C'),('Hannah','A-')}, 
       'English':  {('Eli', 'B-')}}`

我想要像这样的输出

{'A': {'math':{'Tom'}, 'history': {'Hannah'}}, 
  'B':{'math': {'Kevin'}, 'English': {'Eli'}}, 
  'C':{'History': {'Kate', 'Eric'}}}

我不知道如何删除后缀并按元素组织.. 我假设我需要几个字典和 lambda

最佳答案

使用collections.defaultdict

例如:

from collections import defaultdict


subject = {'math':  {('Tom', 'A+'), ('Kevin','B+')},
       'History':  {('Kate', 'C+'),('Eric','C'),('Hannah','A-')}, 
       'English':  {('Eli', 'B-')}}

result = defaultdict(dict)
for k, v in subject.items():
    for name, grade in v:
        result[grade.rstrip("+-")].setdefault(k, set()).add(name)    #Use rstrip to strip + - 
print(result)

输出:

defaultdict(<class 'dict'>, {'A': {'math': {'Tom'}, 'History': {'Hannah'}}, 
                             'B': {'math': {'Kevin'}, 'English': {'Eli'}}, 
                             'C': {'History': {'Kate', 'Eric'}}
                             })

关于python - 按字典中元组的元素组织?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55606586/

相关文章:

python - 子数据帧的子数据帧

python - 选择与键对应的字典值

C++ lambda表达式类中的变量

python - 如何评估配置文件中的简单数学表达式

python - Pandas 数据框旋转

python - adsdb 插入

python - 自动将数据帧的列标题传递到一列中,并将相应的值作为新列

c++ - 没有 Y Combinator 的递归 lambda 回调

Java 枚举作为构造函数传递

python - Python中结合正则表达式读取文本