2014-01-15 2 views
1

я, возможно, понял это неправильно, но, глядя на примерах, найденных в «Learning Python» от O'Reilly я попытался сделать следующее:Добавление элементов в Python словарь

>>> d={} 
>>> d['h']='GG' 
>>> d['f']='JJ' 
>>> d['h']='PP' 
>>> print d 
{'h': 'PP', 'f': 'JJ'} 

Теперь вместо «ключа» 'h', имеющий две записи 'GG' и 'PP', он имеет только последнюю запись, последнюю заменяет первую. Я хочу ОБА в том же ключе.

>>> d['h']+='RR' 
>>> print d 
{'h': 'PPRR', 'f': 'JJ'} 

Опять же, это не сработает, я хотел, чтобы это была не конкатенированная строка, а запятая.

Я смущен, почему это не работает.

+0

Я не нападаю, а спрашиваю из искреннего любопытства - почему вы считаете, что 'd ['h'] = 'PP'' создаст список из уже существующего значения и добавит новое значение в список? Я хотел бы понять, как кто-то новичок в этом языке предвосхищает, как язык будет работать. – SethMMorton

+0

Это нормально, я объясню. Моя «библия» python - это Изучение питона Марк Лутц и Дэвид Ашер. Я сильно использую эту книгу, и ее страницы 49-51 действительно дают мне такое впечатление, что вы можете добавлять элементы к существующим таким ключам. Я уверен, что они не собирались этого делать, но мое МНОЖЕСТВЕННОЕ чтение этих нескольких страниц дало мне такое впечатление, особенно примеры. Я надеюсь, что они включают пример, подобный моему вопросу, в следующем выпуске. –

ответ

6

Использование регистра обрабатывается красиво на collections.defaultdict() типа вместо:

>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> d['h'].append('GG') 
>>> d['f'].append('JJ') 
>>> d['h'].append('PP') 
>>> d 
defaultdict(<type 'list'>, {'h': ['GG', 'PP'], 'f': ['JJ']}) 

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

Вы не имеют использовать defaultdict() объект, вы всегда можете сделать ваши ценности явные списки:

>>> d = {} 
>>> d['h'] = ['GG'] 
>>> d['f'] = ['JJ'] 
>>> d['h'].append('PP') 
>>> print d 
{'h': ['GG', 'PP'], 'f': ['JJ']} 

но теперь вам нужно создать списки в явном виде. Последняя проблема может быть обойдена снова с помощью dict.setdefault():

>>> d = {} 
>>> d.setdefault('h', []).append('GG') 
>>> d.setdefault('f', []).append('JJ') 
>>> d.setdefault('h', []).append('PP') 

, который просто более многословным способ использования того, что defaultdict() объекты могут обеспечить непосредственно.

1

Это звучит, как вы хотите, чтобы ваш словарь иметь 'h' карту в список строк, которые вы можете сделать следующее:

>>> d={} 
>>> d['f']='JJ' 
>>> d['h']=['PP'] 
>>> d['h'].append('RR') 
>>> d 
{'h': ['PP', 'RR'], 'f': 'JJ'} 

Если вы хотите, чтобы все ключи словаря для отображения на (вместо 'h'), вы можете использовать collection.defaultdict, как показано в ответе @ MartijnPieters.

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