2013-11-30 3 views
4

Я пытаюсь взять заданный файл csv и определить первый столбец в качестве ключей, тогда как каждый ключ относится к массиву из двух значений, где одно значение находится во втором столбце, а другое значение находится в третьем столбце. В конце концов, это не вариант переключения столбцов в строки и наоборот, видя, что у меня есть буквально сотни строк в каждом csv, с которым я должен работать. Когда я смотрел онлайн, единственная помощь, которую я мог найти, использовал синтаксис с строками, есть ли способ работать с столбцами?В python, как написать столбцы CSV-файла в словаре?

Вот код, который я пробовал:

import csv 
reader = csv.reader(open('test.csv')) 

result = {} 
for row in reader: 
    key = column0 
    if key in result: 
     pass 
    result[key] = column1 and column2 

print result 

И CSV я тестирую (test.csv):

g1_and_g2, 0.04286547, -1.45 
g2_and_g2, 0.12348197, 3.00 
g3_and_g4, 0.03125879, 1.89 

При запуске программы в терминале, я получаю ошибку :

NameError: name 'g1_and_g2' is not defined 

Я довольно новичок в программировании, поэтому любая полученная помощь ценится. Благодаря!

EDIT, чтобы добавить дополнительную информацию: Ожидаемый результат должен быть просто словарь, который как:

g1_and_g2: 0.04286547,-1.45 
g2_and_g2: 0.12348197, 3.00 
g3_and_g4: 0.03125879, 1.89 

Так по существу, строки в первом столбце должны быть ключи, а целые числа во втором два столбцы должны быть значениями, связанными с ключом в этой строке.

Кроме того, я бег питона 2.7

+3

Сообщение об ошибке совсем не совпадает с кодом. Я подозреваю, что вы изменили стоимость этого вопроса до такой степени, что он не является репрезентативным для вашей проблемы. –

+0

Можете ли вы предоставить ожидаемый результат? Это поможет. – aIKid

+0

Какое поведение вы хотите, если в файле повторяется ключ? Кроме того, какую версию Python вы используете? В более поздних версиях Python есть несколько сокращенных обозначений, которые могут быть полезны. –

ответ

3

Читая ваше описание, я понимаю вашу цель быть, чтобы открыть файл CSV, в котором первый элемент каждой строки является заголовок столбца/ключ, и последующие пункты являются значениями для ячеек в строке, соответствующей этому ключу. Вы хотели бы загрузить все это в словарь?

Это должно сделать что-то вроде того, что вы ищете, если эта спецификация правильная.

import csv 
with open('test.csv', "r") as f: 
    reader = csv.reader(f) 
    result = {} 

    for row in reader: 
     key = row[0] 
     result[key] = row[1:] 

    print(result) 
+0

Спасибо, это сработало! Это, безусловно, намного лучшее и более чистое решение, чем то, что я пытался сделать. – Nick

+1

Если этот подход в целом правильный, а вы используете 2.7, более кратким выполнением является 'result = {row [0]: row [1:] для строки в читателе}' –

+0

Мне это нравится Питер. Я думаю, что есть хороший аргумент для того, чтобы избавиться от плотности выражения с новыми программистами. Преимущества короткого, краткого кода менее актуальны, когда кто-то просто выясняет, что делают движущиеся части. –

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