在Python字典中向现有对象添加属性

15

我试图向一个字典中现有的对象添加属性:

key = 'key1'
dictObj = {}
dictObj[key] = "hello world!"  

#attempt 236 (j/k)
dictObj[key]["property2"] = "value2" ###'str' object does not support item assignment

#another attempt
setattr(dictObj[key], 'property2', 'value2') ###'dict' object has no attribute 'property2'

#successful attempt that I did not like
dictObj[key] = {'property':'value', 'property2':''} ###instantiating the dict object with all properties defined seemed wrong...
#this did allow for the following to work
dictObj[key]["property2"] = "value2"

我尝试过各种组合(包括 setattr 等),但是没有太大的收获。

一旦我将一个项目添加到字典中,如何为该项目添加其他键/值对(而不是向字典添加另一个项目)?

2个回答

25

在我写这个问题的时候,我意识到了我的错误。

key = 'key1'
dictObj = {}
dictObj[key] = {} #here is where the mistake was

dictObj[key]["property2"] = "value2"

问题似乎在于我把键“key1”的实例化对象作为字符串而不是字典。因此,我无法向字符串添加键。这是我在尝试解决这个简单问题时遇到的许多问题之一。当我稍微改变代码时,我也遇到了KeyErrors。


0

严格来说,我们正在考虑向对象添加一个属性。 这可能是这样的:

class DictObj(dict):
  pass

dictObj = DictObj(dict)

dictObj.key = {'property2': 'value2'}

然后,我们可以使用dictObj.key == {'property2': 'value2'}

考虑到问题的背景,我们正在处理向字典添加属性。除了@John Bartels的方法之外,还可以通过以下方式完成:

第一种选择-在一行中添加“完整”内容:

dictObj = {'key': {'property2': 'value2'}}

对于使用初始值创建字典的情况,第二个选项:

dictObj = dict(key = dict(property2 = 'value2'))

第三个选项(Python 3.5及以上版本):

dictObj  = {}
dictObj2 = {'key': {'property2': 'value2'}}
dictObj  = {**dictObj, **dictObj2}

第四个选项(Python 3.9 及以上):
dictObj = {}
dictObj |= {'key': {'property2': 'value2'}}

在所有情况下,结果将为:dictObj == {'key': {'property2': 'value2'}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接