繁体   English   中英

将多列csv文件读取到嵌套字典

[英]Read multiple column csv file to nested dictionary

我正在尝试从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'])

您可以改用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成为列表的defaultdictdefaultdict

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM