【发布时间】:2012-04-11 14:11:34
【问题描述】:
我有这样的obj
{hello: 'world', "foo.0.bar": v1, "foo.0.name": v2, "foo.1.bar": v3}
应该展开成
{ hello: 'world', foo: [{'bar': v1, 'name': v2}, {bar: v3}]}
我在下面写了代码,用'.'分割,删除旧密钥,如果包含'.',则附加新密钥,但它说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
对于 obj.iteritems() 中的 k、v:
RuntimeError: 迭代期间字典大小改变
【问题讨论】:
-
你的问题是什么?错误是不是不清楚?
-
发帖前请先搜索 - stackoverflow.com/…
-
@D.Shawley 具有讽刺意味的是,这个问题现在是谷歌搜索错误消息时的第一个问题。
标签: python