【问题标题】:Create a nested dict containing list from a file从文件中创建一个包含列表的嵌套字典
【发布时间】:2021-06-18 03:55:55
【问题描述】:

例如对于txt文件的

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

我在附加值以在较小的字典中创建列表时遇到问题。我对此很陌生,我不会理解导入命令。非常感谢您的所有帮助!

【问题讨论】:

  • 输入文件是否可以只有 COMMA 或 SPACE 作为分隔符而不是两者?还是您 100% 确定它始终是 COMMA+SPACE 作为分隔符?
  • 您可能会考虑accepting an answer 来奖励那些对您有帮助的人,或者至少发表评论以解释缺少的内容;)

标签: python list dictionary txt


【解决方案1】:

根据您的数据:

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

我不确定这是否是您想要的,但我希望它有所帮助!

【讨论】:

    【解决方案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')
    

    【讨论】:

    • 感谢您的帮助!您能否建议一些其他不需要导入命令的方法?
    • @mylearning 第一个不需要,不用pahtlib.Path也可以读取文件。你也不能指望在不使用库的情况下在 python 中编码,这就是 Python 的力量
    猜你喜欢
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2021-04-04
    • 2021-11-20
    相关资源
    最近更新 更多