Python 是否有可能有条件地忽略某些值?

Python 是否有可能有条件地忽略某些值?,python,generator,yield,Python,Generator,Yield,我有一个生成(伪)json数据的生成器函数。为了提供更好的数据多样性,我想通过编程设置生成或不生成哪些节点。是否有一种方法可以围绕的每个模板行包装逻辑?我意识到,整个成品可以用逻辑来包装,但是排列的数量会让它变得很麻烦 def json_generator(length): for x in range(length): yield {'node1': x, 'node2': x, 'node3': x

我有一个生成(伪)json数据的生成器函数。为了提供更好的数据多样性,我想通过编程设置生成或不生成哪些节点。是否有一种方法可以围绕
的每个模板行包装逻辑?我意识到,整个
成品
可以用逻辑来包装,但是排列的数量会让它变得很麻烦

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

对于这个用例,我是否最好只是将每个节点附加到一个字符串中,并在附加前后添加逻辑?

似乎您正在寻找一个算法/流程

  • 找出排除节点的规则
  • 将节点放在一个系列中
  • 使用Numpy随机方法之一生成布尔数组-可能使用某种加权来实现规则
  • 使用布尔数组索引/选择节点系列中的项
    • 将结果与任何其他文本连接起来,形成一个字符串并生成它


或者,将节点保留在列表中,并使用内置的随机方法选择节点子集。从切割后幸存下来的字符串中构建一个字符串。

听起来这就是你所说的:

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
参数创建生成器,这将保留原始行为。

什么决定创建多少节点?从提供的函数中不清楚您希望产生什么结果?节点长度的每个排列都作为参数传入。它将根据要创建的记录数而有所不同。可能是低烟测试;百万以上用于创建负载测试数据。回复:节点1…节点3。总共约有2-3打。目标不是产生每个排列,而是产生一些可变性。e、 也许每20条记录都会产生node3,但不会产生node2。也许node1只会每隔一条记录输出一次,等等。如果有逻辑的话,这只是实现的问题。您总是可以按照该逻辑事先构造dict,然后只生成它。另外,您生成的是dict,而不是JSON字符串。当然,只需将
yield
语句放在
if
中即可。谢谢!这是一个快速获得我需要的方法。谢谢你的建议!听起来很有趣,但超出了我的时间。