您好,我有以下格式的CSV文件:
ticket asset
1111 3456
1111 6789
1122 2345
1122 7890
我想将其转换为类似Dict的Dict。
{'1111': ['3456', '6789'], '1122':['2345', '7890']}
基本上希望将票证作为“键”,并将该票证下的所有资产作为“值”。
csv.DictReader()有所帮助,但是我无法提取密钥的唯一票据编号,也无法匹配其下的所有资产作为值。
任何帮助都会很棒:)
感谢您快速获得CSV>词典!
如果我想将元组转换为Dict,那将如何工作?
例如:元组: ((1111,3456),(1111,6789),(1122,2345),(1122,7890))
,我希望将其转换为:
{'1111':['3456','6789'],'1122':['2345','7890']}
答案 0 :(得分:6)
使用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)
答案 1 :(得分:0)
将csv导入pandas数据框。使用applymap将数据框转换为字符串数据类型。按票证分组并将所有收集的资产转换为列表。然后将数据帧转换成字典(dict)
template<typename T, typename... Args>
inline void f() { f_wrapper<T, Args...>::f(); }
结果:
import pandas as pd
df=pd.read_csv('file.csv', header=0)
df=df.applymap(str).groupby('ticket')['asset'].apply(list).to_dict()
print(df)