[英]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
成为列表的defaultdict
的defaultdict
:
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.