2013-07-11 27 views
4

Python初学者在这里。我有一个关键字的字典,其值是一个对象(字典)谁也有一个关键值对。我想将一个键值对添加到“子”对象。在python中为现有的键值对对象添加一个新的键值对

给出:

{"foo" : 
    {"bar" : "bars value"} 
} 

我想补充:

{"foo" : 
    {"bar" : "bar value", 
    "baz" : "baz value" 
    } 
} 

这似乎令人难以置信的共同但我似乎无法找到一个很好的办法做到这一点。

+0

注意:Python对象和字典是不同的概念。不要交替使用这些术语。 – user2357112

+2

好吧,'dict'是一个'object',但并不是所有的'object'都是'dict's。 – SethMMorton

+0

没错。谢谢 – Brad

回答

6
somedict = {"foo" : 
    {"bar" : "bars value"} 
} 

somedict['foo']['baz'] = 'baz value' 

当Python遇到somedict['foo']['baz']它首先行动的裸名somedict的价值。它发现它是一个dict。然后它评估somedict['foo'],发现它是另一个字典。然后它为此字典分配一个新的密钥'baz',其值为`baz value'

3

你可以做

mydict["foo"]["baz"] = "baz value" 

>>> mydict = {"foo" : {"bar" : "bars value"}} 
>>> mydict["foo"]["baz"] = "baz value" 
>>> mydict 
{'foo': {'baz': 'baz value', 'bar': 'bars value'}} 
+0

一个问题是,追加动态发生,所以我不知道我正在追加的那个k/v。有没有办法做到这一点,而不需要迭代要添加的k/v对象或对象列表? – Brad

+1

@Brad你的意思是? – ondrejdee

+0

您需要更清楚地了解您在编写代码时所了解的内容,您在运行时知道的内容以及您从未了解的内容。 – user2357112

1

这将不知道该键值对内部dic工作:

>>> dic = {"foo" : {"bar" : "bars value"}} 
...  
>>> pairs = (("baz", "baz value"),) 
for k,v in pairs: 
    for k1 in dic: 
     dic[k1][k]= v 
>>> dic 
{'foo': {'baz': 'baz value', 'bar': 'bars value'}} 

又如:

>>> dic = {"foo" : {"bar" : "bars value"},"bar" : {"bar" : "bars value"} } 
>>> pairs = (("baz", "baz value"),) 
for k,v in pairs: 
    for k1 in dic: 
     dic[k1][k]= v 
...   
>>> dic 
{'foo': {'baz': 'baz value', 'bar': 'bars value'}, 
'bar': {'baz': 'baz value', 'bar': 'bars value'}} 
0

使用update()的替代:

DEF updateChild(d,PK,对): d [ “PK”]更新((对,))

d是整个词典,pk是父键和pair是子键和更新数据的元组。如果你已经有了这个对,这很有用,因为看起来你可能在问题标题中。

相关问题