我尝试为CHECKIO编写扁平化代码,结果很奇怪。 当我试着把dict里面的dict弄平dict里面的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"}}}))
它看起来像是dict中的代码跳转,而不首先迭代dict中的第一项(name
)。
当我尝试在主dict上使用keys()
时,我得到了内部项。有人知道为什么吗?据我所知,这不应该发生。你知道吗
谢谢
当你从
prefix==""
开始仅适用于第一个键。在下一次迭代中,
prefix
不再是""
,因此函数开始将键“堆积”在另一个键上。你知道吗使用另一个变量作为组合前缀,并且永远不要覆盖参数中的值。你知道吗
更新:关于结果中条目的顺序。您的示例
dict
基本上如下所示:因此,最外层的
flatten
调用将以某种未定义的顺序迭代顶级键name
、job
、recent
和additional
。你知道吗相关问题 更多 >
编程相关推荐