【问题标题】:How to open CSV with multiple values in each row and store it in a nested dictionary?如何打开每行具有多个值的 CSV 并将其存储在嵌套字典中?
【发布时间】:2013-10-04 21:27:11
【问题描述】:

我是 python 新手,正在尝试执行以下操作:

打开一个 CSV 文件,其中包含 5 个用逗号分隔的不同值。

我想将数据存储在字典中,其中的键是row[0]

假设有 4 行,因此 4 个主键,我需要为每个键创建另一个嵌套字典,其中包含 4 个新键,每个键具有第 1、2、3 和 4 行的值。

假设 CSV 包含:

1,hi,1,2,3
2,yes,2,3,4
3,no,3,4,5
4,why,4,5,6

我需要存储:

dict={'1': { 'key2':hi,'key3':1,'key4':2,'key5':3}, '2':{ }, '3':{}, '4':{} }

这是我正在使用的代码

import csv
dict={}
    reader = csv.reader(open('filename.csv', 'r'))
    for row in reader:
        key=row[0]
        for key in dict:
           dict[key]={}
           dict[key][key2]=row[1]
           dict[key][key3]=row[2]
           dict[key][key4]=row[3]
           dict[key][key5]=row[4]

我错过了什么?

【问题讨论】:

  • 为什么您的示例中键“2”、“3”和“4”的值是空的?

标签: python csv dictionary


【解决方案1】:

您的代码不起作用的原因是,对于每个 row,您都在遍历空字典 for key in dict 的键,导致没有采取任何操作。

如果您想将{'key2': row[1], 'key3': row[2], 'key4': row[3], 'key5': row[4]} 插入dict[row[0]],请尝试以下操作。另外,避免使用以内置类型命名的变量,即listsetalldict

import csv
output_dict = {}
with open('filename.csv', 'r') as f:    
    reader = csv.reader(f)
    for row in reader:
      output_dict[row[0]] = {'key%d' % (i + 1): row[i] for i in xrange(1, 5)}

【讨论】:

    【解决方案2】:

    这是执行您所要求的代码:

    import csv
    my_dictionary = {}
    reader = csv.reader(open('filename.csv', 'r'))
    for row in reader:
        my_dictionary[row[0]] = {}
        for index in range(1, len(row)):
            my_dictionary[row[0]]['key' + str(index)] = row[index]
    

    您应该避免将字典命名为“dict”,因为这是创建字典对象的函数的名称。此外,变量 'key' 会被迭代器变量覆盖。

    【讨论】:

      猜你喜欢
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 2021-06-13
      • 1970-01-01
      • 2019-08-19
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多