【问题标题】:How do I write the whole csv file into a dictionary using for loops如何使用 for 循环将整个 csv 文件写入字典
【发布时间】:2020-11-09 20:30:47
【问题描述】:

我正在尝试读取 csv 文件并将其写入字典。 Col 1 将是我的密钥,col 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,但我无法将其安装在此处的系统上。

【问题讨论】:

    标签: python csv dictionary


    【解决方案1】:

    update 函数更新字典中的键。

    打印由csv.DictReader 产生的行显示:

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

    发生的情况是您读取和写入两个字典索引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'}
    

    【讨论】:

    • 我相信这是我正在寻找的,但我在“dict1[key] = value”这一行遇到语法错误
    • 我在上面的行中错过了),对此感到抱歉。编辑了答案。
    猜你喜欢
    • 2023-03-25
    • 2021-05-13
    • 2020-08-08
    • 1970-01-01
    • 2016-08-29
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多