将csv转换为具有多个值的字典?

1 投票
2 回答
1975 浏览
提问于 2025-04-17 20:48

我有一个这样的csv文件:

pos,place
6696,266835
6698,266835
938,176299
940,176299
941,176299
947,176299
948,176299
949,176299
950,176299
951,176299
770,272944
2751,190650
2752,190650
2753,190650

我想把它转换成下面这样的字典:

{266835:[6696,6698],176299:[938,940,941,947,948,949,950,951],190650:[2751,2752,2753]}

然后,在这些值的范围内填补缺失的数字:

{{266835:[6696,6697,6698],176299:[938,939,940,941,942,943,944,945,946947,948,949,950,951],190650:[2751,2752,2753]}
}

现在我尝试使用这里建议的方案来构建字典,但它总是用新的值覆盖旧的值。

任何帮助都会很棒。

这是我写的一个将csv转换为字典的函数:

def csv2dict(filename):
"""
reads in a two column csv file, and the converts it into dictionary
"""
import csv
with open(filename) as f:
    f.readline()#ignore first line
    reader=csv.reader(f,delimiter=',')
    mydict=dict((rows[1],rows[0]) for rows in reader)
return mydict   

2 个回答

1

根据你尝试过的内容 -

from collections import default dict

# open archive reader
myFile = open ("myfile.csv","rb")
archive = csv.reader(myFile, delimiter=',')
arch_dict = defaultdict(list)

for rows in archive: 
    arch_dict[row[1]].append(row[0])

print arch_dict 
4

最简单的方法是使用 collections.defaultdict(),并且用一个列表来处理:

import csv
from collections import defaultdict

data = defaultdict(list)

with open(inputfilename, 'rb') as infh:
    reader = csv.reader(infh)
    next(reader, None)  # skip the header

    for col1, col2 in reader:
        data[col2].append(int(col1))
        if len(data[col2]) > 1:
            data[col2] = range(min(data[col2]), max(data[col2]) + 1)

这样在读取数据的时候,它会自动扩展范围。

撰写回答