首页 > 解决方案 > 将 CSV 转换为字典,其中一列作为键,一列作为其值

问题描述

您好,我有一个格式如下的 CSV 文件:

ticket asset
1111   3456
1111   6789
1122   2345
1122   7890

我想把它转换成一个像这样的字典:

{'1111': ['3456', '6789'], '1122':['2345', '7890']}

基本上希望将票作为“键”并将该票下的所有资产作为“值”。

csv.DictReader() 有点帮助,但我无法为键提取唯一的票号并匹配其下的所有资产的值。

任何帮助都会很棒:)

感谢您如此快速地获取 CSV > Dict!

如果我想将元组转换为字典,那将如何工作?

例如:元组:((1111, 3456), (1111, 6789), (1122, 2345), (1122, 7890))

我希望将其转换为:

{'1111': ['3456', '6789'], '1122':['2345', '7890']}

标签: pythoncsvdictionary

解决方案


使用collections.defaultdict

from collections import defaultdict
import csv

d = defaultdict(list)
with open(filename, 'r', newline='') as f:
    reader = csv.reader(f, delimiter='\t')
    next(reader) # toss headers
    for ticket, asset in reader:
        d[ticket].append(asset)

使用常规字典:

import csv

d = {}
with open(filename, 'r', newline='') as f:
    reader = csv.reader(f, delimiter='\t')
    next(reader) # toss headers
    for ticket, asset in reader:
        d.setdefault(ticket, []).append(asset)

推荐阅读