带有重复键的python3 csv + python defaultdict

时间:2016-03-10 11:01:33

标签: python python-2.7 python-3.x

我有一个csv文件,它有很多序列号和材料编号,例如下面所示(我只需要前两列,即串口和底盘,不需要休息)。

import sys
import csv 
with open('file1.csv', mode='r') as infile:
        reader = csv.reader(infile)
        mydict1 = {rows[0]:rows[1] for rows in reader}
        print(mydict1)

我有以下代码片段,它将所有序列号和材料号都放入字典中,但这里删除了重复键,它会捕获最新的序列号。

工作代码

from collections import defaultdict
with open('file1.csv',mode='r') as infile:
    data=defaultdict(dict)
    reader=csv.reader(infile)
    list_res = list(reader)
    for row in reader:
        result=data[row[0]].append(row[1])
        print(result)

我需要捕获具有相应值的重复键,但它失败了。我使用了python defaultdict,看起来我错过了一些东西。

无效

@RequestMapping("/**")
@ResponseBody
public DeferredResult<ResponseEntity<String>> execute() {
    DeferredResult<ResponseEntity<String>> result = new DeferredResult<>();
    execute(deferredResult);
    return result;
}

有人可以纠正我将重复的密钥捕获到字典中。

1 个答案:

答案 0 :(得分:4)

您需要将列表传递给defaultdict而不是dict

data=defaultdict(list)

此外,您不需要将reader对象转换为列表,为了迭代它,您也不应该在每次迭代中将剪切的附加内容分配给变量:

data=defaultdict(list)
with open('file1.csv') as infile:
    reader=csv.reader(infile)
    for row in reader:
        try:      
            data[row[0]].append(row[1])
        except IndexError:
            pass
    print(data)