2015-05-16 2 views
-1

Это то, что CSV выглядитПочему python читает только последнюю строку csv?

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

А вот код, который пытается преобразовать CSV в Словаре:

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

Вы не можете этого сделать: словарь должен иметь разные ключи, а ваш CSV имеет две записи с одним и тем же ключом (16 мая).

Если изменить log.csv, ваш код работает, как ожидалось:

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

Вы можете сделать что-то, чтобы сделать ключи разные, такие, как добавить номер строки:

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

выход будет

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

Или вы можете использовать массив из dicts (а го получить другой выход, но теперь со всеми данными):

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

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

Или вы можете попробовать и группу все значения одного и того же ключа вместе, например,

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

Но в остальном, каждый идентичный ключ в словаре перепишет все предыдущие вхождения, так что вы всегда будете «видеть» только последний.

0

При попытке вставить различное значение для существующего ключа в dict, оно отменяет предыдущее значение

Смежные вопросы