如何使用for循环将整个csv文件写入字典

时间:2020-11-09 20:30:47

标签: python csv dictionary

我正在尝试读取一个csv文件并将其写入字典。第1栏是我的钥匙,第2栏是我正在写的项目。但是,当我打印字典时,似乎只有行了。

def compare_csv(fileone, filetwo):
    dict1 = {}
    with open(fileone, 'r') as dataset1:
        for line in csv.DictReader(dataset1):
            dict1.update(line)
    print(dict1)

这是我的csv文件的样子

id,num
1,123
2,23,2,3
3,41,78

这是我打印字典时得到的

`{'id': '3', 'num': '41, 78'}`

我想要的是

{'id': 'num', '1': '123', '2': '23, 2, 3', '3': '41, 78'}

我不确定为什么会发生这种情况,因为当我使用for循环时,是否不对每一行进行迭代,以便DictReader将col1读取为键,将col2读取为项?另外,附带的问题是这是搜索和比较某些东西的最有效方法。例如,我正在遍历所有字典键(id)并查看项目是否与另一个列表匹配。因此,例如,如果我在键2上,那么我正在检查另一个列表,以查看数字23、2和3是否都在该列表上。我曾考虑过使用熊猫,但无法在此处将其安装在系统上。

1 个答案:

答案 0 :(得分:1)

update函数更新字典中的键。

打印从csv.DictReader得到的行显示:

{'id': '1', 'num': '123'}
{'id': '2', 'num': '23', None: ['2', '3']}
{'id': '3', 'num': '41', None: ['78']}

发生的事情是您读写两个dict索引idnum,因此在始终覆盖它们之后,它们的末尾是最后一行的值。

例如,您可以做的是分割线并根据需要写入值。

with open(fileone, 'r') as f:
    lines = f.readlines()

for line in lines:
   key = line.split(",")[0]
   value = ", ".join(line.split(",")[1:])
   dict1[key] = value

嵌入到完整代码中,它看起来像这样。

def compare_csv(fileone, filetwo):
    dict1 = {}
    with open(fileone, 'r') as f:
        lines = f.readlines()

    for line in lines:
        line = line.strip()
        key = line.split(",")[0]
        value = ", ".join(line.split(",")[1:])
        dict1[key] = value

    return dict1

print(compare_csv('./test.csv', './test.csv'))

以上示例产生了预期的输出:

{'id': 'num', '1': '123', '2': '23, 2, 3', '3': '41, 78'}