2015-11-25 3 views
0

Я пытаюсь читать через CSV-файла в следующем формате:Повторяющиеся значения в словаре

number,alphabet 
1,a 
2,b 
3,c 
2,b 
1,a 

Мой код для создания словаря:

alpha = open('alpha.csv','r') 
csv_alpha = csv.reader(alpha) 

alpha_file = {row[0]:row[1] for row in csv_alpha} 

ВЫВОД:

alpha_file = { 1:'a', 2:'b', 3:'c' } 

Просмотрев файл, 1 и 2 имеют повторяющиеся значения.

Как я могу изменить мой вывод:

alpha_file = { 1:'a', 1:'a', 2:'b', 2:'b', 3:'c' } 

СПГ - PYTHON

+3

короткий ответ, вы не можете. dicts сделаны, чтобы иметь уникальные ключи. длинный ответ, вы можете подключить каждую клавишу к списку вместо одного целого –

+0

В словаре слова должны быть разными. У вас не может быть дубликатов в словаре. Почему у вас есть дубликаты? –

+0

@ El'endiaStarman Мне нужно найти прозорливость каждого ключа для заданного значения. Так что, если у меня есть 2 a, у меня есть два 1's. Прямо сейчас я получаю только один. Но это правда, мне нужно найти другой способ решить эту проблему. ключи неизменяемы и не могут иметь дубликатов – Luke

ответ

2

использовать list для хранения значения ключа

alpha = open('alpha.csv','r') 
csv_alpha = csv.reader(alpha) 

alpha_file = dict() 
for row in csv_alpha: 
    if row[0] in alpha_file: 
     alpha_file[row[0]].append(row[1]) 
    else: 
     alpha_file[row[0]] = [row[1]] 

выход будет как:

{ 1:['a','a'],2:['b','b'], 3:['c'] } 

вывести число ключевых вхождений, используйте for петлю

d = { 1:['a','a'],2:['b','b'], 3:['c'] } 
amount = [] 
for key, value in d.iteritems(): 
    amount += [key] * len(value) 
print amount 

выход выглядит как:

[1, 1, 2, 2, 3] 
+0

. Вы можете использовать' defaultdict', чтобы не было необходимости проверять, существует ли значение в dict. –