将项添加到Python字典

时间:2014-01-15 15:22:59

标签: python dictionary add

我可能已经理解了这个错误,但是看看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。

我很困惑,为什么这不起作用。

2 个答案:

答案 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的回答所示。