首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在json序列化过程中求字典值

在json序列化过程中求字典值
EN

Stack Overflow用户
提问于 2014-11-19 22:17:14
回答 3查看 114关注 0票数 2

我正在尝试获得一系列序列化字典,其中只有一个特定的值更改。

虚构的巨蟒字典名为"obj“

代码语言:javascript
复制
_gen = (value for value in range(5,10))
obj = {'mcu': {'led0': {'duty': _gen}}}

应该像这样“起作用”:

代码语言:javascript
复制
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 5}}}
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 6}}}
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 7}}}

有什么办法可以把这个存档吗?

这样做也是可以的:

代码语言:javascript
复制
_placeholder = <some trick to create a placeholder>
obj = {'mcu': {'led0': {'duty': _placeholder}}}

应该像这样“工作”吗?

代码语言:javascript
复制
>>> <placeholder modification trick> = 5
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 5}}}
>>> <placeholder modification trick> = 6
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 6}}}
>>> <placeholder modification trick> = 7
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 7}}}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-19 22:52:24

事实上,这是最好的答案。尽管我对回答自己的问题感觉不太好。

代码语言:javascript
复制
import json
import types

_gen = (value for value in range(5, 10))
property = {'mcu':{'led0':{'duty': _gen}}}

def generator_handler(obj):
    if isinstance(obj, types.GeneratorType):
      return obj.next()
    else:
      return None

print json.dumps(property, default=generator_handler)
print json.dumps(property, default=generator_handler)
print json.dumps(property, default=generator_handler)
票数 3
EN

Stack Overflow用户

发布于 2014-11-19 22:23:22

代码语言:javascript
复制
import json

_gen = ({'mcu': {'led0': {'duty': value}}} for value in range(5, 10))

for obj in _gen:
    print json.dumps(obj)

运行收益率:

代码语言:javascript
复制
$ python gen.py
{"mcu": {"led0": {"duty": 5}}}
{"mcu": {"led0": {"duty": 6}}}
{"mcu": {"led0": {"duty": 7}}}
{"mcu": {"led0": {"duty": 8}}}
{"mcu": {"led0": {"duty": 9}}}

可以将生成器表达式封装在一个函数中:

代码语言:javascript
复制
import json

def generate_generator(a, b):
    return ({'mcu': {'led0': {'duty': value}}} for value in range(a, b))

for obj in generate_generator(2, 7):
    print json.dumps(obj)
票数 3
EN

Stack Overflow用户

发布于 2014-11-19 22:28:21

这里有一个解决方案

导入json

代码语言:javascript
复制
class Gen(object):
    def __init__(self):
        self.x = 1
    def next(self):
        self.x+=1
        return self.x

class Gencoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Gen):
            return obj.next()
        return json.JSONEncoder.default(self, obj)

_gen = Gen()
print json.dumps({'mcu': {'led0': {'duty': _gen}}}, cls=Gencoder)
print json.dumps({'mcu': {'led0': {'duty': _gen}}}, cls=Gencoder)
print json.dumps({'mcu': {'led0': {'duty': _gen}}}, cls=Gencoder)
print json.dumps({'mcu': {'led0': {'duty': _gen}}}, cls=Gencoder)

您可以在CodeBunk http://codebunk.com/b/49813922/上运行代码。

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

https://stackoverflow.com/questions/27028129

复制
相关文章

相似问题

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