【问题标题】:Read multiple column csv file to nested dictionary将多列 csv 文件读取到嵌套字典
【发布时间】:2019-02-22 21:56:56
【问题描述】:

我正在尝试从 csv 文件中读取数据并将数据存储在嵌套字典中。

CSV file content

Type, ID, Frequency
Advanced,AAA,30 secs
Advanced,AAA,60 secs
Advanced,BBB,30 secs
Basic,CCC,30 secs
Basic,CCC,60 secs
Basic,DDD,30 secs

Expected output where the 'type' is the higher level key with the values as another dictionary with the ID and frequency as the key/value pair.

{'Advanced': {'AAA':['30 secs', '60 secs'], 'BBB':['30 secs']}, 'Basic': {'CCC':['30 secs', '60 secs'], 'DDD':['30 secs']}}

通过两列,我可以使用 defaultdict 容器来工作。

symbols = co.defaultdict(list)
with open(filename, 'r') as f:
    lines = csv.DictReader(f)
    for line in lines:
        print(line)
        symbols[line['Type']].append(line['ID'])

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    您可以改用dict.setdefault

    symbols = {}
    with open(filename, 'r') as f:
        for row in csv.DictReader(f, skipinitialspace=True):
            symbols.setdefault(row['Type'], {}).setdefault(row['ID'], []).append(row['Frequency'])
    

    symbols 变为:

    {'Advanced': {'AAA': ['30 secs', '60 secs'], 'BBB': ['30 secs']}, 'Basic': {'CCC': ['30 secs', '60 secs'], 'DDD': ['30 secs']}}
    

    或者,如果您更喜欢使用collections.defaultdict,您应该将symbols 改为defaultdict of defaultdict 的列表:

    symbols = defaultdict(lambda: defaultdict(list))
    for row in csv.DictReader(f, skipinitialspace=True):
        symbols[row['Type']][row['ID']].append(row['Frequency'])
    

    【讨论】:

      猜你喜欢
      • 2016-11-22
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 2018-04-15
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多