我的生成器函数“returns”/生成我想要的结果(打印时),但是如果我将结果附加到一个大列表中,那么列表中会有许多重复的结果。为什么?我怎样才能避免这种情况?在
输入:
input = [
[
{'orgunit': '013107','attr1': 2, 'attr2': 3},
{'orgunit': '013113','attr1': 20, 'attr3': 30},
],
[{...}]
]
其中,输入共享公共orgunit
s的dict
s。
如果我打印isolated
:
目标(但将每个元素追加到列表中):
^{pr2}$方法和生成器:
def transform(input):
values = []
gen = process_event(input)
for event in gen:
values.append(event)
# print
print values
def process_event(input):
for i in xrange(len(input)):
for event in input[i]:
isolated = {}
isolated['orgunit'] = event['orgunit']
for key, value in event.copy().iteritems():
isolated['dataElement'] = key
isolated['value'] = value
# print
print isolated
yield isolated
我得到的是:
>>>print values
{
"dataElement": "attr1",
"value": 2,
"orgunit": "013107"
},
{
"dataElement": "attr1",
"value": 2,
"orgunit": "013107"
}...
似乎您修改了相同的字典,因此第一个和第二个输出返回的项在引用的意义上是相同的。简单的解决方案是在更深的范围内创建新的隔离字典,而不是在它之外。
因此,您的代码正确版本是:
输出:
^{pr2}$相关问题 更多 >
编程相关推荐