【问题标题】:App Engine Entity to DictionaryApp Engine 实体到字典
【发布时间】:2011-08-22 17:28:42
【问题描述】:

将谷歌应用引擎实体(在 python 中)复制到字典对象的好方法是什么?我正在使用 db.Expando 对象。所有属性都是扩展属性。

谢谢!

【问题讨论】:

  • 你想达到什么目的?可能有更好的方法来做到这一点,具体取决于您需要做什么。
  • 嘿尼克,我试图把它变成一些 JSON,以便我可以将它作为 REST 资源提供

标签: python google-app-engine expando


【解决方案1】:

拥有一个名为 foo 的实体尝试:

foo.__dict__

【讨论】:

  • 此解决方案为您提供对象上的所有内容,对于模型对象,使用属性方法,对于 Expando,使用 dynamic_properties 方法
  • @Tom Willis - 我相信“properties”和“dynamic_properties”方法只返回键,需要迭代才能复制所有内容。 "dynamic_properties" 也是 dict 对象中的一个键,所以我相信你可以这样做: foo.__dict__['dynamic_properties']
  • 这是个坏主意 - 正如@Tom 所说,它将返回对象的所有成员,这与属性的字典不同。
  • 更正,其:foo.__dict__['_dynamic_properties'](加下划线)
  • @Dutrow 一个更好的主意是使用properties 和dynamic_properties - 你不应该依赖内部实现细节。
【解决方案2】:

试试这个。其中“m”是您希望转换为字典的 Expando 实例。

dict([(x,getattr(m,x)) for x in m.dynamic_properties()])

【讨论】:

    【解决方案3】:

    这应该可以工作

    from google.appengine.ext import db
    db.to_dict(entity)
    

    【讨论】:

      【解决方案4】:

      新版本的 Google Cloud Python 客户端库运行起来并不那么优雅。所以这是一个快速修复。

      your_dict = {x: entity[x] for x in entity.keys()}
      

      请记住,字符串是作为 unicode 传入和返回的,而不是 basestring。 ;)

      【讨论】:

        【解决方案5】:

        接受的答案应该是:

        {}.update(entity}
        

        【讨论】:

        • 这对我不起作用。你能详细说明吗?你的括号也有问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-05
        • 2013-01-05
        • 2014-03-20
        • 1970-01-01
        相关资源
        最近更新 更多