在Python中将值附加到字典中

时间:2012-01-17 15:20:08

标签: python dictionary

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

1:[2, 3, 4, 7, 13], 2:[8, 9, 5]

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

dict[master = dict[master].append(id)

但我得到以下内容:

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

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

  

newvalue = values,id

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

1:[[2, 3, 4, 7, 13], 17] 

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

1:[2, 3, 4, 7, 13, 17] 

我可以使用一些剥离功能 - 但这是一种很简单的方法和简单的方法。我可能会忽略这里简单的事情。提前谢谢。

3 个答案:

答案 0 :(得分:6)

使用collections.defaultdict(并且,为了好玩,将每个条目设为collections.deque;当然,您也可以使用普通的list

from collections import defaultdict, deque

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

d[1].append(2)
d[1].extend([3, 4, 7, 13])

这里的基本想法是你的字典值总是 deque s并且总是附加到它们,所以你永远不必担心是否值是int。如果您使用字典中不存在的密钥,defaultdict将自动为您创建新的deque,因此您无需检查密钥是否已存在于字典中。

如果你已经有一个单int个值的常规字典 - 比如它是你调用的某个函数的返回值 - 你可以使用该字典来构建你的新字典,然后再使用它不管你在做什么。

d = defaultdict(deque)
for key, value in old_d.iteritems():
    d[key].append(value)

答案 1 :(得分:4)

列表是可变的。只需改变它。

dict[master].append(id)

答案 2 :(得分:1)

(1)创建一个包装它的类(更好的是,使用defaultdict(deque)代替dict,如@kindall所建议的那样;如果需要更多,则只需要一个新类那给你)

(2)使用deque作为dict中每个条目的值,甚至是空值或单值条目,并附加到该双端队列。 deque旨在两端都有固定时间附加; list实际上是一个向量。