以为我有一个解决这个问题的简单方法,但事实证明我已经离开了。
我有一个嵌套词典:
my_dict = { "username": "myEmail@email.com",
"name": { "first": "John", "last": "Doe" },
"occupation": "Web Developer" }
我编写了一个递归函数来将其解包到现有字典中:
def adder(my_dict, existing_dict):
for k, v in my_dict:
if not isinstance(v, dict):
existing_dict[k] = v
else:
adder(v.iteritems(), existing_dict)
return existing_dict
existing_dict = { "role": "employee" }
adder(my_dict.iteritems(), existing_dict)
逐步完成循环,一切顺利,直到我点击递归,然后my_dict
从字典转到dictionary-itemiterator object at 0x07f6750086c00
。
我没有看到任何明显的错误,虽然看似v.iteritems()
打破了一切(但循环结束)。有什么想法吗?
答案 0 :(得分:4)
我同意上述内容 - 迭代dict本身只迭代键。
另外,我想你想从函数中返回existing_dict,my_dict是未修改的。此外,您希望将dict传递回函数,而不是迭代器。
def adder(my_dict, existing_dict):
for k, v in my_dict.iteritems():
if not isinstance(v, dict):
existing_dict[k] = v
else:
adder(v, existing_dict)
return existing_dict
In [47]: adder(my_dict, existing_dict)
Out[47]:
{'first': 'John',
'last': 'Doe',
'occupation': 'Web Developer',
'role': 'employee',
'username': 'myEmail@email.com'}