在Python中将值附加到字典中

And*_*ian 1 python dictionary

我正在寻找使用字典来处理某些数据输出的最智能方法.我有一个唯一的键,它将其他值相关联,例如我们有1:[2,3,4,7],2:[8,9,5].我想要做的是能够附加值,以便第一个键我可以添加数字13并得到以下内容:

1:[2, 3, 4, 7, 13], 2:[8, 9, 5]
Run Code Online (Sandbox Code Playgroud)

追加似乎不是最明智的做法.我在用:

dict[master = dict[master].append(id)
Run Code Online (Sandbox Code Playgroud)

但我得到以下内容:

AttributeError:'int'对象没有属性'append'

现在我可以简单地使用它们的键的先前值,并简单地执行以下操作(id = 17):

newvalue = values,id

但这会导致额外的括号,例如

1:[[2, 3, 4, 7, 13], 17] 
Run Code Online (Sandbox Code Playgroud)

什么是确保我只在一组括号中得到数字的最明智的方法,即

1:[2, 3, 4, 7, 13, 17] 
Run Code Online (Sandbox Code Playgroud)

我可以使用一些剥离功能 - 但有一个很好的简单方法和简单的方法来做到这一点.我可能会忽略这里简单的事情.提前致谢.

kin*_*all 6

使用collections.defaultdict(并且,wottthehell,使每个条目collections.deque只是为了好玩; list当然也可以使用普通的老式).

from collections import defaultdict, deque

d = defaultdict(deque)   # or ...(list)

d[1].append(2)
d[1].extend([3, 4, 7, 13])
Run Code Online (Sandbox Code Playgroud)

这里的基本思想是你的字典值总是 deque s并且你总是附加到它们,所以你永远不必担心值是否是一个int.如果使用字典中不存在的键,defaultdictdeque自动为您创建新键,因此您无需检查字典中是否已存在该键.

如果你已经有一个带有单个int值的常规字典- 比如它是你调用的某个函数的返回值 - 你可以使用该字典来构建你的新字典,然后再将它用于你正在做的任何事情.

d = defaultdict(deque)
for key, value in old_d.iteritems():
    d[key].append(value)
Run Code Online (Sandbox Code Playgroud)