Python添加到一个键值的列表

时间:2015-04-15 01:29:35

标签: python list dictionary

我正在尝试添加一个列表,该列表是两个不同的操作中的键值(操作?)。以下是一个例子:

item['foo'] = ["blah"]
item['foo'] = ["garble"]

其中item是字典,foo是关键字。然后,如果我打印foo,我得到:

["garble"]

我想要的时候

["blah", "garble"]

如何获得我想要的最终结果?

编辑:格式化

8 个答案:

答案 0 :(得分:6)

由于您希望该值为列表,因此您应该像这样附加到item['foo']

item = {}
item['foo'] = ["blah"]
item['foo'].append("garble")
print(item)

打印出来:

{'foo': ['blah', 'garble']}

如果garble是一个列表,例如garble = ["blah2"]之类的内容,你可以像这样列出合并列表:

item = {}
item['foo'] = ["blah"]
garble = ["blah2"]
item['foo'] += garble
print item

反过来打印出来:

{'foo': ['blah', 'blah2']}

答案 1 :(得分:2)

您正在覆盖字典值而不是附加到字典值,请尝试:

item['foo'] = ['blah']
item['foo'].append('garble')

答案 2 :(得分:2)

您使用所显示的代码执行的操作首先是将值['blah']分配给密钥'foo',然后在下一步中将值['garble']分配给密钥{ {1}}。密钥只能分配给一个值("值",我们指的是任何类型,可以是整数,字符串,列表,元组等),因此第二个赋值会覆盖第一。您想要的是将密钥'foo'分配给列表'foo'。该列表是一个值。这可以像这样一步完成:

["blah", "garble"]

或者,如果由于某种原因,您想要创建一个值为列表的键值对,然后稍后将该项添加到该列表中,那么您将这样做:

item['foo'] = ["blah", "garble"]

第一行将列表item['foo'] = ['blah'] item['foo'].append('garble') 分配给键['blah']。第二行从字典'foo'中检索分配给键'foo'的值,将列表方法item应用于它(如果从带有键的字典中检索到的值,它将仅起作用) .append()实际上是一个列表!),然后将该字符串'foo'附加到该列表中。结果是:

'garble'

不要这样做:

>>> item['foo']
['blah', 'garble']

或者你最终会得到这个列表的第二个元素另一个列表,如下所示:

item['foo'].append(['garble'])

答案 3 :(得分:1)

关闭你只需要追加它

item = dict()

item['foo'] = ["blah"]
#above sets key foo to list value blah
#either of below appends a new value to the foo's list
item['foo'] += ["garble"] 
#or item['foo'].append("garble")
#note if this method is used list notation is needed to stop interpretation
# of each character. So I'd use append but wanted to show how close you were

print item
#outputs: {'foo': ['blah', 'garble']}

@PythonNoob看到评论,如果+ =对你有用,但是.append是首选的方法,我也会看@Zizouz212答案,因为扩展功能是一个有用的补充。

答案 4 :(得分:1)

获取密钥的值:

>>> item["foo"] = ["bar"] # bar is the value

如果bar是列表,则可以使用已与之关联的所有方法。我们在这里使用append

>>> item["foo"].append("meh")
>>> item["foo"]
["bar", "meh"]

当然,如果你想添加一个列表(并让它“合并”),你可以使用extend方法。

>>> item["foo"].extend(["gar", "ble"])
>>> item["foo"]
["bar", "meh", "gar", "ble"]

如果你不在那里使用extend,你将拥有一个嵌套列表:

["bar", "meh", ["gar", "ble"]]

答案 5 :(得分:1)

我会将collections.defaultdictlist.extend结合使用:

>>> from collections import defaultdict
>>> dd = defaultdict(list)
>>> dd[1].extend([2]) # You can now do stuff like this without initialization
>>> dd[1].extend((3, 4)) # No worries, hakuna matata style
>>> dd[1]
[2, 3, 4]

在我看来,这使得代码非常简单和干净。

您还可以使用list.append向列表中添加单个元素,而不是迭代的所有元素:

>>> dd[1].append(5)
>>> dd[1]
[2, 3, 4, 5]

答案 6 :(得分:1)

您可以使用setdefault。它会首先尝试寻找'foo';如果找不到,setdefault会将'foo'添加到item字典,相应的值为[],并且还会返回对此值的引用。对于此返回值,您可以附加vals列表中的条目。

如果setdefault能够在字典中找到键'foo',它只会返回相应的值,这也是一个列表。

item = {}
vals = ['blah', 'garble']

for x in vals:
    item.setdefault('foo', []).append(x)
print item['foo']         # print ['blah', 'garble']

答案 7 :(得分:0)

>>> item = {}
>>> item['foo'] = ["blah"]
>>> item['foo'].append("garble")
>>> item
{'foo': ['blah', 'garble']}
>>>