Python - 如何使用字典中的现有值向键添加值?

时间:2015-08-14 07:00:02

标签: python dictionary

首先,我是Python的初学者

我有这本词典:

d={'Name': ('John', 'Mike'),
   'Address': ('LA', 'NY')}

现在我想在这样的键中添加更多值。

d={'Name': ('John', 'Mike', 'NewName'),
   'Address': ('LA', 'NY', 'NewAddr')}

我尝试更新并追加,但我认为它只适用于列表/元组,并且我尝试使用d.items()将其放入列表中,然后覆盖d字典,但我认为它的杂乱和不必要?

python是否有直接的方法来执行此操作?

7 个答案:

答案 0 :(得分:6)

元组()是一种不可变类型,这意味着您无法更新其内容。您应该首先将其转换为list以便变异:

>>> d = {'Name': ['John', 'Mike'],
         'Address': ['LA', 'NY']}
>>> d['Name'].append('NewName')
>>> d['Address'].append('NewAddr') 

或者,您可以从现有元组创建一个新元组以及要添加的字符串:

>>> d['Name'] = d['Name'] + ('NewName',)
>>> d['Address'] = d['Address'] + ('NewAddr',)

答案 1 :(得分:5)

只需将tuple添加到existing value

即可
d={'Name': ('John', 'Mike'),
  'Address': ('LA', 'NY')}

d["Name"]=d["Name"]+("lol",)
print d

答案 2 :(得分:3)

我确定你应该使用一个list作为字典的值而不是tuple是不可变的。

d={'Name': ['John', 'Mike'], 'Address': ['LA', 'NY']}

d['name'].append('NewName')
d['Address'].append('NewAddr')

然后,d

{'Name': ['John', 'Mike', 'NewName'], 'Address': ['LA', 'NY', 'NewAddr']}

答案 3 :(得分:1)

你可以做到

>>> d['Name'] += "NewName",
>>> d
{'Name': ('John', 'Mike', 'NewName'), 'Address': ('LA', 'NY')}

在" NewName"之后不要忘记,。因为你想把它添加到元组。

答案 4 :(得分:1)

我的建议是使用defaultdict列表:

import collections
d = collections.defaultdict(list)

d['Name'] += 'John'
d['Name'] += 'Mike'
print (d)

defaultdict(<type 'list'>, {'Name': ['John', 'Mike']})

这避免了创建初始列表的特殊情况。

答案 5 :(得分:0)

d['Name'] = d['Name'] + ('NewName',)  # note the trailing comma!

由于元组是不可变的,你需要通过将它与新元素组合成一个新元组,从现有元组创建一个新元组。或者使用列表而不是元组:

d = {'Name': ['John', 'Mike']}
d['Name'].append('NewName')

第二种方法更可取,因为每次要添加新名称时都不会创建新元组。

FWIW,对于元组,你使用正常括号(),并使用角度[]作为列表(如果你是初学者,差异可能不会很明显)。

编辑:最后一段绝对不是侮辱或其他任何内容,它是出于好意而写的,但也许可以改写一下。我只是想确保创建tuplelist之间的语法差异,因为差异很小,有时会在Python的新手之间产生混淆。如果听起来粗鲁,我道歉。

答案 6 :(得分:0)

如果您正在使用元组,则每次元组不可变时都必须重新创建元组:

 d[key] = d.get(key, tuple()) + (newelm,)

但如果你要追加你最好使用list:

 d = { "key1" : ["val1a", "val2a"],
       "key2" : ["val2"] }

 try:
     d[key].append(newelm)
 except KeyError:
     d[key] = [newelm]

如果您确定该密钥已经存在(或者如果它不存在则会出现错误),则无需使用try - except

 d[key].append(newelm)