为什么python只读取csv的最后一行?

时间:2015-05-16 10:32:17

标签: python csv io

这就是csv的样子

2015-05-16,3.99 2015-05-16,4.0

以下是代码,它试图将csv转换为dict:

with open('log.csv') as filename:
    reader  = csv.reader(filename,delimiter=',') #fieldnames=['Date','GPA'] 
    display = {row[0]:row[1] for row in reader}
    print display

输出:

$python test.py
{'2015-05-16': 4.0}

这应该是这样的:

$ python test.py
{'2015-05-16':3.99,'2015-05-16': 4.0}

2 个答案:

答案 0 :(得分:2)

您不能这样做:字典需要不同的密钥,而您的CSV有两个具有相同密钥的条目(5月16日)。

如果更改log.csv,则代码按预期工作:

const char*

您可以执行某些操作以使密钥不同,例如添加行号:

{'2015-05-16': '3.99', '2015-05-17': '4.0'}

将输出

display = { (row[0], i):row[1] for i, row in enumerate(reader) }

或者您可以使用dicts的数组(并获得不同的输出,但现在包含所有数据):

{('2015-05-16', 0): '3.99', ('2015-05-16', 1): '4.0'}

或者你可以尝试分组同一个键的所有值,例如。

display = [ { row[0]:row[1] } for row in reader ]

[{'2015-05-16': '3.99'}, {'2015-05-16': '4.0'}]

但是否则,字典中的每个相同的键都会覆盖之前的任何一个键,这样您就可以始终看到''只有最后一个。

答案 1 :(得分:0)

当您尝试在dict中为现有键插入不同的值时,它会覆盖先前的值