更新python字典(为现有密钥添加另一个值)

时间:2017-01-24 10:33:14

标签: python

我有一个带键的简单字典,值:

d = {'word': 1, 'word1': 2}

我需要添加另一个值(从值中创建列表):

d = {'word': [1, 'something'], 'word1': [2, 'something1']}

我无法处理它。有线索吗?

8 个答案:

答案 0 :(得分:11)

嗯,你可以简单地使用:

d['word'] = [1,'something']

或者如果需要提取1

d['word'] = [d['word'],'something']

最后说你想用新值更新一系列键,例如:

to_add = {'word': 'something', 'word1': 'something1'}

你可以使用:

for key,val in to_add.items():
    if key in d:
        d[key] = [d[key],val]

答案 1 :(得分:11)

您可以编写一个函数来为您执行此操作:

>>> d = {'word': 1, 'word1': 2}
>>> def set_key(dictionary, key, value):
...     if key not in dictionary:
...         dictionary[key] = value
...     elif type(dictionary[key]) == list:
...         dictionary[key].append(value)
...     else:
...         dictionary[key] = [dictionary[key], value]
... 
>>> set_key(d, 'word', 2)
>>> set_key(d, 'word', 3)
>>> d
{'word1': 2, 'word': [1, 2, 3]}

或者,正如@Dan指出的那样,您可以使用列表最初保存数据。如果这样做就是Pythonic方法,你可以定义一个自定义的defaultdict,它可以直接将数据添加到列表中:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> d[1].append(2)
>>> d[2].append(2)
>>> d[2].append(3)
>>> d
defaultdict(<type 'list'>, {1: [2], 2: [2, 3]})

答案 2 :(得分:5)

如果您始终使用列表,即使您只有一个值,也会是最简单的。它只是一个长度为1的列表。

>>> d = {'a': [1], 'b': [2]}
>>> d
{'a': [1], 'b': [2]}
>>>
>>> d['a'].append(5)
>>> d
{'a': [1, 5], 'b': [2]}

答案 3 :(得分:2)

您可以创建字典,为每个键分配一个列表

d = {'word': [1], 'word1': [2]}

,然后使用以下合成器将任何值添加到现有键或添加一对新的键值:

d.setdefault(@key,[]).append(@newvalue)

您的示例将是这样的:

d = {'word': [1], 'word1': [2]}
d.setdefault('word',[]).append('something')
d.setdefault('word1',[]).append('something1')
d.setdefault('word2',[]).append('something2')   
print(d)
{'word': [1, 'something'], 'word1': [2, 'something1'], 'word2': ['something2']}

答案 4 :(得分:2)

这对我有用,无需导入任何东西或 setdefaults python3

gear = {
    'Cameras': ['77D','SL2'],
    'Lens': ['10mm','18-55mm', '50mm', '70-250mm'],
    'Mounts': ['Monopod', 'Tripod']
}
def dump(dictionary):
    print('Camera Gear: \n')
    for key, value in dictionary.items():
        print(key, value)
dump(gear)
gear['Mounts'].append('Gimbal')
dump(gear)

output:

答案 5 :(得分:1)

感谢您的帮助。我这样做了(感谢Willem Van Onsem建议):

x = (dict(Counter(tags))) #my dictionary
for i in x:
    color = "#%06x" % random.randint(0, 0xFFFFFF)
    x[i] = [x[i], color]

答案 6 :(得分:0)

这就是我要做的。希望对您有所帮助。如果您有很多项目要添加到词典中,这可能不是最快的方法。

d = {'word':1, 'word1':2}

d['word']=[1, 'something']

d['word1']=[2, 'something1']

print(d)

{'word': [1, 'something'], 'word1': [2, 'something1']} 

答案 7 :(得分:0)

您可以尝试以下操作:

d['word'] = [1, 'something']

d['word1'] = [2, 'something']

立即致电d

希望这会有所帮助!