从文件创建包含列表的嵌套dict

2024-06-16 12:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,对于

Math, Calculus, 5 
Math, Vector, 3
Language, English, 4
Language, Spanish, 4

进入字典:

 data={'Math':{'name':[Calculus, Vector], 'score':[5,3]}, 'Language':{'name':[English, Spanish], 'score':[4,4]}}

我很难在较小的dict中添加值来创建列表。我对这一点非常陌生,我不理解导入命令。非常感谢你的帮助


Tags: name命令列表data字典englishmathlanguage
2条回答

对于每行,找到3个值,然后将它们添加到dict结构中

from pathlib import Path

result = {}
for row in Path("test.txt").read_text().splitlines():
    subject_type, subject, score = row.split(", ")

    if subject_type not in result:
        result[subject_type] = {'name': [], 'score': []}

    result[subject_type]['name'].append(subject)
    result[subject_type]['score'].append(int(score))

您可以通过使用defaultdict来简化它,如果密钥还不存在,它将创建映射

result = defaultdict(lambda: {'name': [], 'score': []}) # from collections import defaultdict
for row in Path("test.txt").read_text().splitlines():
    subject_type, subject, score = row.split(", ")
    result[subject_type]['name'].append(subject)
    result[subject_type]['score'].append(int(score))

使用pandas.DataFrame可以直接生成格式化数据并输出所需格式

import pandas as pd

df = pd.read_csv("test.txt", sep=", ", engine="python", names=['key', 'name', 'score'])
df = df.groupby('key').agg(list)
result = df.to_dict(orient='index')

根据您的数据:

data={'Math':{'name':['Calculus', 'Vector'], 'score':[5,3]}, 
      'Language':{'name':['English', 'Spanish'], 'score':[4,4]}}

如果要附加到词典中的列表,可以执行以下操作:

data['Math']['name'].append('Algebra')

data['Math']['score'].append(4)

如果要添加新词典,可以执行以下操作:

data['Science'] = {'name':['Chemisty', 'Biology'], 'score':[2,3]}

我不确定这是否是你想要的,但我希望它能帮助你

相关问题 更多 >