python - 子类化 python 字典

标签 python json oop elasticsearch

我在我的 Python 应用程序中使用 ElasticSearch,并希望能够创建一个表示查询的可重用字典对象。此处描述了 JSON 结构 http://pulkitsinghal.blogspot.co.uk/2012/02/how-to-use-elasticsearch-query-dsl.html我正在使用 PyES 查询搜索服务器。使用 PyES,我们可以传递一个 dict 对象,该对象在发送到服务器之前得到 jsonified。我想创建一个通用查询库,其中只有实际的查询词发生变化,所以我想我应该将 dict 子类化,这样我就可以通过构造函数传入查询词,例如,当 dict 被 jsonified 时,我最终会得到像这样:

{
  "fields": [
    "name",
    "shortDescription",
    "longDescription"
  ],
  "query": {
    "query_string": {
      "fields": [
        "name"
      ],
      "query": query_term,
      "use_dis_max": true
    }
  }
}

我该怎么做?是否只有实例成员通过 __dict__ 返回,如果是这样,我是否必须在构造函数中设置此数据结构?这是最好的方法吗?还是我应该创建一个不扩展 dict 的类,只创建一个 to_dict() 方法来返回正确结构的字典?

回答:

这似乎工作正常,任何使它更“pythonic”的建议将不胜感激! (是的,我知道没有文档字符串)

class StandardQuery(object):

      search_fields = ['meta_keywords', 'meta_description', \
                       'fields.title.value', 'slug']
      return_fields = ['slug', 'fields.title.value']

      def __init__(self, query):

          self.query = query

      def to_dict(self):

          output = dict()

          output['fields'] = self.search_fields
          output['query'] = {'query_string': {'fields': self.return_fields, \
                                              'query': self.query, 'use_dis_max': True}}

          return output

最佳答案

如果你不想要所有正常的dict行为那么你绝对应该创建一个单独的类。然后你可以给它一个 to_dict()方法,或者更好,因为你真的想转换为 json 创建一个自定义 json 编码器(如果需要解码器)与 default 一起使用json.dumps() 的参数.

json.dump()json.dumps()可选参数 default是一个应返回对象的序列化版本或引发 TypeError 的可调用对象(以获得默认行为)。

关于python - 子类化 python 字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10102038/

相关文章:

c# - 反序列化错误 - 值不能为空/未定义无参数构造函数

Java OOP 封装。为什么是 Object.doSomething();比 doSomething(Object); 更好?

php - php中抽象和接口(interface)有什么区别?

python - 值(value)错误、真值错误、模糊错误

python - 如何注释 plotly 本身之外的一个点?

python - 如何编写基于 python 的 firebase https 函数?

java - model.addAttribute() 对于每个循环

python - 为什么我的 jython "*$py.class"文件在我将它们移动到不同的包后没有更新代码更改?

sql - 在 sqlite 中使用 json1 查询 JSON 数组的多个值

javascript - 结合数组和字典属性的数据类型