尝试在类中使用递归方法来展平嵌套的OrderedPicts。结果 RuntimeError:字典在迭代过程中更改了大小
我收到一份订购的照片清单。大多数订购的照片都很简单键:字符串值属性,但有些值却包含另一个OrderedDict。这种筑巢可以下降几个层次。下面是一个非常简单的示例:
records = [
OrderedDict([
('rec-1_field-1', 'r1f1_value'),
('rec-1_field-2', 'r1f2_value'),
('rec-1_nest-1', OrderedDict([
('n1_field-1', 'n1f1_value'),
('n1_field-2', 'n1f2_value')
])
)
]),
OrderedDict([
...
])
]
我的目标是取消嵌套这些有序的图片,这样上面的开始被转换成这个(注意高键。低键“我想知道的命名法):
flatRecords = [
{'rec-1_field-1':'r1f1_value',
'rec-1_field-2':'r1f2_value',
'rec-1_nest-1.n1_field-1':'n1f1_value',
'rec-1_nest-1.n1_field-2':'n1f2_value'},
...
]
这是我的代码的简化版本。我将每个orderedict输入一个方法,该方法在找到嵌套的orderedict时递归。我想我在递归中重写了flatRecord Dict,但无法确定如何更正。你知道吗
class unNested():
def __init__(self):
pass
def flatResults(self, OD):
self.OD = OD
self.flattenedRecords = []
for eachRecord in self.OD:
self.flattenedRecords.append(self.flatten(eachRecord))
return self.flattenedRecords
def flatten(self, record):
self.record = record
self.flatRecord = {}
for eachKey in self.record:
if isinstance(self.record[eachKey], dict):
self.subRecord = self.flatten(self.record[eachKey])
for eachSub in self.subRecord:
self.key = eachKey + '.' + eachSub
self.flatRecord[self.key] = self.record[eachSub]
else:
self.flatRecord[eachKey] = self.record[eachKey]
return self.flatRecord
所以下面的代码片段会导致“RuntimeError:dictionary在迭代过程中更改了大小”
records = [
OrderedDict([
('rec-1_field-1', 'r1f1_value'),
('rec-1_field-2', 'r1f2_value'),
('rec-1_nest-1', OrderedDict([
('rec-1_nest-1_field-1', 'r1n1f1_value'),
('rec-1_nest-1_field-2', 'r1n1f2_value')
])
)
]),
OrderedDict([
('rec-2_field-1', 'r2f1_value'),
('rec-2_field-2', 'r2f2_value'),
('rec-2_nest-1', OrderedDict([
('rec-2_nest-1_field-1', 'r2n1f1_value'),
('rec-2_nest-1_field-2', 'r2n1f2_value')
])
)
])
]
crush = unNested()
crush.flatResults(records)
我肯定这是个业余的错误,但我很想听听你的想法和指导。谢谢!你知道吗
可以使用展平方法:
输出:
要为列表中的每个元素创建展开结构,请执行以下操作:
相关问题 更多 >
编程相关推荐