我有这样的obj
{hello: 'world', "foo.0.bar": v1, "foo.0.name": v2, "foo.1.bar": v3}
Run Code Online (Sandbox Code Playgroud)
它应该扩展到
{ hello: 'world', foo: [{'bar': v1, 'name': v2}, {bar: v3}]}
Run Code Online (Sandbox Code Playgroud)
我在下面编写代码,拆分'.',删除旧密钥,如果包含'.',则追加新密钥,但它说RuntimeError: dictionary changed size during iteration
def expand(obj):
for k in obj.keys():
expandField(obj, k, v)
def expandField(obj, f, v):
parts = f.split('.')
if(len(parts) == 1):
return
del obj[f]
for i in xrange(0, len(parts) - 1):
f = parts[i]
currobj = obj.get(f)
if (currobj == None):
nextf = parts[i + 1]
currobj = obj[f] = re.match(r'\d+', nextf) and [] or {}
obj = currobj
obj[len(parts) - 1] = v
Run Code Online (Sandbox Code Playgroud)
for k,v in obj.iteritems():
RuntimeError:字典在迭代期间改变了大小
Sco*_*ter 22
像消息说:你在遍历该条目在扩大中间更改的条目数在expandField()的OBJ内一段时间.
您可以尝试创建一个您希望的表单的新字典,或者以某种方式记录您想要进行的更改,然后在循环完成后创建它们.
您可能希望在列表中复制密钥并使用后者迭代您的dict,例如:
def expand(obj):
keys = obj.keys()
for k in keys:
expandField(obj, k, v)
Run Code Online (Sandbox Code Playgroud)
我让你分析结果行为是否符合你的预期结果.
| 归档时间: |
|
| 查看次数: |
43951 次 |
| 最近记录: |