Python 嵌套字典中的迭代错误
Python iterating bug inside nest dicts
我尝试为 CHECKIO 编写扁平化代码,但得到了奇怪的结果。
当我尝试将 dict inside dict inside dict 扁平化时。
def flatten(dic, prefix =""):
results = {}
for k in dic:
prefix = prefix+"/"+k if prefix else k
print(prefix)
if isinstance(dic[k], dict):
results = dict(list(results.items()) + list(flatten(dic[k],prefix).items()))
else:
results[prefix] = dic[k]
return results
print(flatten({"name": {
"first": "One",
"last": "Drone"},
"job": "scout",
"recent": {},
"additional": {
"place": {
"zone": "1",
"cell": "2"}}}))
它似乎是代码在字典中跳转而没有首先迭代字典中的第一项 (name
)。
当我尝试在主字典上使用 keys()
时,我得到了内部项目。有人知道为什么吗?据我所知,这不应该发生。
谢谢
当您从 prefix==""
、
开始时
prefix = prefix+"/"+k if prefix else k
只对第一个键有效。在下一次迭代中,prefix
不再是 ""
,因此函数开始 "stockpiling" 键一个接一个。
使用另一个变量作为组合前缀,永远不要覆盖参数中的值。
更新:关于结果中条目的顺序。您的示例 dict
基本上如下所示:
{ "name": {
"first": "One",
"last": "Drone"},
"job": "scout",
"recent": {},
"additional": {
"place": {
"zone": "1",
"cell": "2"
}
}
}
因此最外层的 flatten
调用将遍历顶级键 - name
、job
、recent
和 additional
- 在一些未定义的订单。
我尝试为 CHECKIO 编写扁平化代码,但得到了奇怪的结果。 当我尝试将 dict inside dict inside dict 扁平化时。
def flatten(dic, prefix =""):
results = {}
for k in dic:
prefix = prefix+"/"+k if prefix else k
print(prefix)
if isinstance(dic[k], dict):
results = dict(list(results.items()) + list(flatten(dic[k],prefix).items()))
else:
results[prefix] = dic[k]
return results
print(flatten({"name": {
"first": "One",
"last": "Drone"},
"job": "scout",
"recent": {},
"additional": {
"place": {
"zone": "1",
"cell": "2"}}}))
它似乎是代码在字典中跳转而没有首先迭代字典中的第一项 (name
)。
当我尝试在主字典上使用 keys()
时,我得到了内部项目。有人知道为什么吗?据我所知,这不应该发生。
谢谢
当您从 prefix==""
、
prefix = prefix+"/"+k if prefix else k
只对第一个键有效。在下一次迭代中,prefix
不再是 ""
,因此函数开始 "stockpiling" 键一个接一个。
使用另一个变量作为组合前缀,永远不要覆盖参数中的值。
更新:关于结果中条目的顺序。您的示例 dict
基本上如下所示:
{ "name": {
"first": "One",
"last": "Drone"},
"job": "scout",
"recent": {},
"additional": {
"place": {
"zone": "1",
"cell": "2"
}
}
}
因此最外层的 flatten
调用将遍历顶级键 - name
、job
、recent
和 additional
- 在一些未定义的订单。