假设由于循环到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'
答案 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')])}
如果要连续索引,可以用一个单独的计数进行迭代。