Python:如何交换访问对象或字典?

时间:2010-11-21 11:13:16

标签: python django dictionary object

我正在编写一个Django视图,有时会从数据库中获取数据,有时也会从外部API获取数据。

当它来自数据库时,它是一个Django模型实例。必须使用点表示法访问属性。

来自API,数据是字典,可通过下标表示法访问。

在任何一种情况下,都会对数据进行一些处理。

我想避免

if from_DB:
   item.image_url='http://example.com/{0}'.format(item.image_id)
else:
   item['image_url']='http://example.com/{0}'.format(item['image_id'])

我正试图找到一种更优雅,干燥的方式来做到这一点。

有没有办法通过适用于词典或对象的键来获取/设置?

3 个答案:

答案 0 :(得分:6)

在JavaScript中它们是等价的(通常很有用;我提到它以防你不知道你正在进行Web开发),但在Python中它们是不同的 - [items]与{{1} }。

使用.attributes

编写允许通过属性访问的内容很容易
__getattr__

然后只需使用它就可以使用class AttrDict(dict): def __getattr__(self, attr): return self[attr] def __setattr__(self, attr, value): self[attr] = value (它会接受dict作为参数,因为它正在扩展dict),但您可以执行{dict之类的操作{1}}它会将其映射到item.image_url,获取或设置。

答案 1 :(得分:6)

您可以使用Bunch class,它将字典转换为接受点表示法的内容。

答案 2 :(得分:2)

我不知道其含义是什么,但是我会在django模型中添加一个方法,该方法将字典读入自身,因此您可以通过模型访问数据。