【问题标题】:Creating a Nested Dictionary While Converting to a Tuple在转换为元组时创建嵌套字典
【发布时间】:2021-05-05 06:59:30
【问题描述】:

我是 Python 新手(我已经学习了大约一周,但我知道 R)。

我正在尝试创建一个嵌套字典,将学生姓名映射到包含他们分数的字典。此分数字典的每个条目都应键入作业名称并将相应的成绩保存为整数。例如,grade_dicts['Thorny']['Exam 1'] == 100

我很接近了,但是我在 def Convert 函数中的某些地方做得不对,我想知道您是否可以提供一些帮助。我读过嵌套字典:https://www.geeksforgeeks.org/python-nested-dictionary/,但考虑到它来自元组的方式,这个问题似乎根本不同。

非常感谢!

grades = [
    # First line is descriptive header. Subsequent lines hold data
    ['Student', 'Exam 1', 'Exam 2', 'Exam 3'],
    ['Thorny', '100', '90', '80'],
    ['Mac', '88', '99', '111'],
    ['Farva', '45', '56', '67'],
    ['Rabbit', '59', '61', '67'],
    ['Ursula', '73', '79', '83'],
    ['Foster', '89', '97', '101']
]

def assign(grades):
    assignments = []
    for i in grades[:]:
        assignments.extend(i[:]) #play around with this! #ended up using extend
    return(assignments)

assignments = assign(grades)

assignments = list(zip(*[iter(assignments)]*4))

assignments = assignments[1:7]

def Convert(tup, di): 
    for a, b,c,d in tup: 
        di.setdefault(a, [])
        di.setdefault(b, ['Exam 1'])
        di.setdefault(c, ['Exam 2']) 
        di.setdefault(d, ['Exam 3'])
        
    return di 

dictionary = {} 

grade_lists = Convert(assignments, dictionary)
grade_lists

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    您可以进行嵌套字典理解来构建输出,首先将初始数据转换为更简单的格式,例如:

    grades = [
        # First line is descriptive header. Subsequent lines hold data
        ['Student', 'Exam 1', 'Exam 2', 'Exam 3'],
        ['Thorny', '100', '90', '80'],
        ['Mac', '88', '99', '111'],
        ['Farva', '45', '56', '67'],
        ['Rabbit', '59', '61', '67'],
        ['Ursula', '73', '79', '83'],
        ['Foster', '89', '97', '101']
    ]
    
    exams = grades[0][1:]
    names = [data[0] for data in grades[1:]]
    list_of_values = [data[1:] for data in grades[1:]]
    
    output = {
        name: { exam: value for exam,value in zip(exams, values) } for name,values in zip(names, list_of_values)
    }
    
    print(output)
    >>> {'Thorny': {'Exam 1': '100', 'Exam 2': '90', 'Exam 3': '80'}, 'Mac': {'Exam 1': '88', 'Exam 2': '99', 'Exam 3': '111'}, 'Farva': {'Exam 1': '45', 'Exam 2': '56', 'Exam 3': '67'}, 'Rabbit': {'Exam 1': '59', 'Exam 2': '61', 'Exam 3': '67'}, 'Ursula': {'Exam 1': '73', 'Exam 2': '79', 'Exam 3': '83'}, 'Foster': {'Exam 1': '89', 'Exam 2': '97', 'Exam 3': '101'}}
    
    # example
    print(output['Ursula']['Exam 1'])
    >>> 73
    

    【讨论】:

    • 太棒了。非常感谢!
    猜你喜欢
    • 2013-12-07
    • 1970-01-01
    • 2022-06-14
    • 2019-12-28
    • 1970-01-01
    • 2017-01-20
    • 2021-06-14
    • 2021-05-21
    相关资源
    最近更新 更多