从CSV文件列表中创建字典 - Python 2.7

时间:2013-11-19 01:16:08

标签: python-2.7

我有一个带有标题值的示例csv文件:Fruit,Size,Color:

Fruit  Size  Color
Apple  5     Red 
Apple  6     Green
Pear   4     Green

我想创建一个字典,在那里我可以查找'Fruit'并获得'Size'和'Color'。

我的代码:

import csv
new_dict = {}
with open('data.csv', 'rb') as f:
  reader = csv.reader(f)
  for row in reader:
    if row[0] in new_dict:
      new_dict[row[0]].append(row[1:])
    else:
      new_dict[row[0]] = row[1:]
print new_dict

我打算在打印new_dict时看到的输出是:

{'Apple': ['5', 'Red'],['6', 'Green'], 'Pear': ['4', 'Green'] }

或者可能(不确定如何使用相同键的多个值)

{'Apple': [['5', 'Red'],['6', 'Green']], 'Pear': ['4', 'Green'] }

但我实际得到的是:

{'Apple': ['5', 'Red', ['6', 'Green']], 'Pear': ['4', 'Green'] }

问题是['5', 'Red', ['6', 'Green']],其中要添加的第二个Apple项目位于第一个Apple项目列表中。


基本上,我希望能够键入:new_dict["Apple"]并使用“Apple”键返回所有列表。

那么如何正确构建我的字典以包含具有相同键的多个值?并避免将其他值放入为该键添加的第一个值的列表中? (在这种情况下为“Apple”)

1 个答案:

答案 0 :(得分:2)

由于您的数据点成对出现,因此您需要将它们保持在列表中。这解决了这个问题:

new_dict[row[0]] = row[1:]更改为new_dict[row[0]] = [row[1:]]

这将产生:

{'Apple': [['5', 'Red'], ['6', 'Green']], 'Pear': [['4', 'Green']] }

或者,您可以将它们设置为更适合您的问题的元组,因为它们是固定大小的:

.append(tuple(row[1:]))new_dict[row[0]] = [tuple(row[1:])]

这将产生:

{'Apple': [('5', 'Red'), ('6', 'Green')], 'Pear': [('4', 'Green')] }