首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在值内动态重命名python键

在值内动态重命名python键
EN

Stack Overflow用户
提问于 2017-02-03 17:02:28
回答 1查看 55关注 0票数 0

当数据输出时,我需要更改数据的“键”。

我不确定django是否能做到这一点。FWIW,这输出到弹性搜索(不确定这是否相关)。

基本上,它是在{"level":1 }中出现的,但我希望它可以改为{"level_1":1}

如何才能做到这一点?这是我目前的代码

代码语言:javascript
复制
class Tag(models.Model):
    name = models.CharField("Name", max_length=5000, blank=True)
    level = models.IntegerField(null=True, blank=True)

class Entry(models.Model):
    title = models.CharField("Title", max_length=10000, blank=True)
    tag = models.ManyToManyField('Tag', blank=True)
    def indexing(self):
        obj = TaskIndex(
            meta={'id': self.id},
            title=self.title,
            tag=list(self.tag.values('name').annotate(level=F('level_%)))
        )
        obj.save()
        return obj.to_dict(include_meta=True)

结果如何:

代码语言:javascript
复制
[  
   {  
      "title":"Test item",
      "tag":[  
         {  
            "name":"Nope",
            "level":1
         },
         {  
            "name":"Yep",
            "level":2
         }
      ],
   }
]

我想要的结果是:

代码语言:javascript
复制
[  
   {  
      "title":"Test item",
      "tag":[  
         {  
            "name":"Nope",
            "level_1":1
         },
         {  
            "name":"Yep",
            "level_2":2
         }
      ],
   }
]

Search.py

代码语言:javascript
复制
class TaskIndex(DocType):
    title = String()
    class Meta:
        index = 'task-index'

# Bulk indexing function, run in shell
def bulk_indexing():
    TaskIndex.init()
    es = Elasticsearch()
    bulk(client=es, actions=(b.indexing() for b in models.Task.objects.all().iterator()))

# Simple search function
def _search(title):
    s = Search().filter('term', title=title.text)
    response = s.execute()
    return response
EN

回答 1

Stack Overflow用户

发布于 2017-02-03 17:35:08

我不熟悉弹性搜索或者你正在做的索引函数,但是也许是某种将格式化数据的函数呢?

代码语言:javascript
复制
def format_dict(data):
    for obj in data:
        new_tags = []
        for tag in obj.get('tag', []):
            level_number = tag['level']
            tag.pop('level')
            tag['level_%s' % level_number] = level_number
            new_tags.append(tag)
        obj['tag'] = new_tags
    return data

然后在代码中使用它

return format_dict(obj.to_dict(include_meta=True))

至少当我使用如下一些测试数据运行它时,这是可行的。

print(format_dict([{"title": "Test item", "tag": [{"name": "Nope", "level": 1}, {"name": "Yep", "level": 2}], }]))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42029351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档