Python 将CSV转换为字典,其中一列作为键,一列作为值

Python 将CSV转换为字典,其中一列作为键,一列作为值,python,csv,dictionary,Python,Csv,Dictionary,您好,我有一个CSV文件,格式如下: ticket asset 1111 3456 1111 6789 1122 2345 1122 7890 我想把它转换成一个Dict,比如: {'1111': ['3456', '6789'], '1122':['2345', '7890']} 基本上,我们希望将票据作为“键”,并将票据下的所有资产作为“值” csv.DictReader()帮助不大,但我无法提取密钥的唯一票证号,也无法匹配其下的所有资产的值 任何帮助都会很好:) 感谢您

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

ticket asset
1111   3456
1111   6789
1122   2345
1122   7890
我想把它转换成一个Dict,比如:

{'1111': ['3456', '6789'], '1122':['2345', '7890']}
基本上,我们希望将票据作为“键”,并将票据下的所有资产作为“值”

csv.DictReader()帮助不大,但我无法提取密钥的唯一票证号,也无法匹配其下的所有资产的值

任何帮助都会很好:)

感谢您这么快就收到CSV>Dict

如果我想将一个元组转换为Dict,那将如何工作

e、 g:元组: ((11113456),(11116789),(11222345),(11227890))

我想把它转换成:


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

使用
集合。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)

使用
集合.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)

将csv导入数据框。使用applymap将数据帧转换为字符串数据类型。按票据分组并将所有收集的资产转换为列表。然后将数据帧转换为字典(dict)

结果:

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

将csv导入数据框。使用applymap将数据帧转换为字符串数据类型。按票据分组并将所有收集的资产转换为列表。然后将数据帧转换为字典(dict)

结果:

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

对于票据,读卡器中的资产:d.setdefault(票据,[])。追加(资产)
也是一种可能性。@TimPietzcker:很公平。创建和销毁一次性列表并不比额外的in语句更糟糕。而且它比较短。更新answer.worked很有魅力-我唯一需要更改的是在reader:d.setdefault(ticket,[])中为ticket,asset设置分隔符=“,”
。追加(asset)
)也是一种可能性。@TimPietzcker:这很公平。创建和销毁一次性列表并不比额外的in语句更糟糕。而且它比较短。更新answer.com非常有效-我唯一需要更改的是设置delimiter=“,”