是否可以有条件地忽略某些产生的值?

问题描述

我有一个生成功能,用于生成(伪)json数据。为了提供更好的数据多样性,我想以编程方式设置生成不生成哪些节点。有没有一种方法可以在yield的每个模板行周围包裹逻辑?我意识到整个yield可以用逻辑包装,但是排列的数量会使它变得麻烦。

def json_generator(length):
    for x in range(length):
        yield {'node1': x,'node2': x,'node3': x
               }

对于这种用例,我是否最好将每个节点附加到字符串上,并在附加逻辑周围加上逻辑?

解决方法

似乎您正在寻找算法/过程

  • 弄清楚排除节点的规则
  • 将节点放入“熊猫系列”中
  • 使用Numpy随机方法之一生成布尔数组-也许使用某种加权来实现您的规则
  • 使用布尔数组索引/选择节点Series中的项目
    • 将结果与其他任何文本连接起来以生成字符串并产生结果

或者将节点保留在列表中,并使用内置的随机方法选择节点的子集。用能在切割后幸存的琴弦制作琴弦。

,

听起来这就是您在说的:

def json_generator(length,add1=True,add2=True,add3=True):
    for x in range(length):
        r = {}
        if add1: r['node1'] = x
        if add2: r['node2'] = x
        if add3: r['node3'] = x
        yield r

for x in json_generator(10,False,True,True):
    print(x)

结果:

{'node2': 0,'node3': 0}
{'node2': 1,'node3': 1}
{'node2': 2,'node3': 2}
{'node2': 3,'node3': 3}
{'node2': 4,'node3': 4}
{'node2': 5,'node3': 5}
{'node2': 6,'node3': 6}
{'node2': 7,'node3': 7}
{'node2': 8,'node3': 8}
{'node2': 9,'node3': 9}

如果仅使用length参数创建生成器,则会保留原始行为。