是否可以有条件地省略一些产生的值?
Is it possible to conditionally omit some of values yielded?
我有一个用于生成(假)json 数据的生成器函数。为了提供更好的数据多样性,我想以编程方式设置生成或不生成哪些节点。有没有办法在每个 yield
的模板行周围包装逻辑?我意识到整个 yield
可以包含在逻辑中,但是排列的数量会使它变得麻烦。
def json_generator(length):
for x in range(length):
yield {'node1': x,
'node2': x,
'node3': x
}
对于这个用例,我是否最好将每个节点附加到一个字符串,并围绕附加逻辑?
您似乎在寻找 algorithm/process
- 找出排除节点的规则
- 将节点放入 Pandas 系列
- 使用 Numpy 随机方法之一生成布尔数组 - 可能使用某种加权来实现您的规则
- 使用布尔数组 index/select 节点系列中的项目
- 将结果与任何其他文本连接起来形成一个字符串并生成它
或者将节点保留在列表中并使用 built-in 随机方法来选择节点的子集。从切割后幸存下来的字符串构建一个字符串。
你说的好像是这个:
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
参数创建生成器,这将保留原始行为。
我有一个用于生成(假)json 数据的生成器函数。为了提供更好的数据多样性,我想以编程方式设置生成或不生成哪些节点。有没有办法在每个 yield
的模板行周围包装逻辑?我意识到整个 yield
可以包含在逻辑中,但是排列的数量会使它变得麻烦。
def json_generator(length):
for x in range(length):
yield {'node1': x,
'node2': x,
'node3': x
}
对于这个用例,我是否最好将每个节点附加到一个字符串,并围绕附加逻辑?
您似乎在寻找 algorithm/process
- 找出排除节点的规则
- 将节点放入 Pandas 系列
- 使用 Numpy 随机方法之一生成布尔数组 - 可能使用某种加权来实现您的规则
- 使用布尔数组 index/select 节点系列中的项目
- 将结果与任何其他文本连接起来形成一个字符串并生成它
或者将节点保留在列表中并使用 built-in 随机方法来选择节点的子集。从切割后幸存下来的字符串构建一个字符串。
你说的好像是这个:
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
参数创建生成器,这将保留原始行为。