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

Python 如何使用for循环将整个csv文件写入字典,python,csv,dictionary,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(d

我正在尝试读取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是否都在该列表上。我曾考虑过使用panda,但我不能在这里的系统上安装它。

使用
update
函数更新字典中的一个键

def compare_csv(fileone, filetwo):
    dict1 = {}
    with open(fileone, 'r') as dataset1:
        for line in csv.DictReader(dataset1):
            dict1.update(line)
    print(dict1)
打印来自
csv.DictReader
的行显示:

{'id': '1', 'num': '123'}
{'id': '2', 'num': '23', None: ['2', '3']}
{'id': '3', 'num': '41', None: ['78']}
所发生的事情是,您读取和写入两个dict索引
id
num
,因此在总是覆盖它们之后,它们在最后一行的值

例如,您可以拆分行并根据需要写入值

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'}

我相信这就是我要寻找的,但我得到了一个语法错误,行“dict1[key]=value”我错过了一个
,对此表示抱歉。编辑了答案。