从OrderDict到字典python

时间:2018-08-24 05:17:34

标签: python dictionary

假设由于循环到csv文件,我得到以下命令:

OrderedDict([('NAME', 'Apple'), ('Colour', 'red'), ('Type', 'Fruit'), ('COMMENT', 'Fuji')])

数据格式的我的csv

  NAME                 Colour             Type         COMMENT
 Apple                  red               Fruit        Fuji
 Apple                  green             Fruit        nan

我打开csv文件的代码是:

reader =csv.DictReader(csvfile)

record_dictionary = {}

for k,row in reader:
    print(row)
    record_dictionary = {row for row in reader if not row['COMMENT']}

我的csv文件有4列,我希望将每一列作为键值对传递,并且COMMENT列不能为nan。因此,在这种情况下,我的最终结果将是包含4个键值对的键1的字典。

为什么在尝试实际构建字典时出现以下错误?

TypeError: unhashable type: 'collections.OrderedDict'

1 个答案:

答案 0 :(得分:1)

您永远不会为dict指定密钥。假设nan是指csv中的空字段。您可以使用dict遍历具有索引的行来创建enumerate()

import csv

with open('test.csv') as fileo:
    reader = csv.DictReader(fileo)

    rec = {i:row for (i,row) in enumerate(reader) if row['COMMENT'] != ''}
    print(rec)

test.csv

NAME,Colour,Type,COMMENT
 Apple,red,Fruit,Fuji
 Apple,green,Fruit,
 Apple,blue,Fruit,Kiwi

输出:

{0: OrderedDict([(' NAME', ' Apple'), ('Colour', 'red'), ('Type', 'Fruit'), ('COMMENT', 'Fuji')]), 
2: OrderedDict([(' NAME', ' Apple'), ('Colour', 'blue'), ('Type', 'Fruit'), ('COMMENT', 'Kiwi')])}

如果要连续索引,可以用一个单独的计数进行迭代。