我可能已经理解了这个错误,但是看看O'Reilly的“学习Python”中的例子,我试着做了以下事情:
>>> d={}
>>> d['h']='GG'
>>> d['f']='JJ'
>>> d['h']='PP'
>>> print d
{'h': 'PP', 'f': 'JJ'}
现在,而不是具有两个条目'h'
和'GG'
的'key''PP'
,它只有最后一个条目,最后一个条目取代第一个条目。
我想要同一把钥匙。
>>> d['h']+='RR'
>>> print d
{'h': 'PPRR', 'f': 'JJ'}
再次这不起作用,我想要的不是串联字符串而是以逗号分隔的entires。
我很困惑,为什么这不起作用。
答案 0 :(得分: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 :(得分:1)
听起来你希望你的字典有'h'
映射到字符串的列表,你可以这样做:
>>> d={}
>>> d['f']='JJ'
>>> d['h']=['PP']
>>> d['h'].append( 'RR' )
>>> d
{'h': ['PP', 'RR'], 'f': 'JJ'}
如果您希望字典中的所有键都映射到列表(而不仅仅是'h'
),您可以使用@ {1}},如@ MartijnPieters的回答所示。