我正在尝试添加一个列表,该列表是两个不同的操作中的键值(操作?)。以下是一个例子:
item['foo'] = ["blah"]
item['foo'] = ["garble"]
其中item
是字典,foo
是关键字。然后,如果我打印foo,我得到:
["garble"]
我想要的时候
["blah", "garble"]
如何获得我想要的最终结果?
编辑:格式化
答案 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.defaultdict
与list.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']}
>>>