【发布时间】:2017-10-04 02:08:28
【问题描述】:
我的合并字典的代码有问题。这是我得到的:
output1 = {'children':
{'children':
{'children':
{'name': 'thriller.mp3', 'type': 'file'},
'name': 'pop',
'type': 'folder'},
'name': 'test_pendrive',
'type': 'folder'},
'name': 'media',
'type': 'folder'}
output2 = {'children':
{'children':
{'children':
{'name': 'paranoid.mp3', 'type': 'file'},
'name': 'metal',
'type': 'folder'},
'name': 'test_pendrive',
'type': 'folder'},
'name': 'media',
'type': 'folder'}
我的代码现在是这样的:
from collections import defaultdict
l1 = list(output2.items())
l2 = list(output.items())
l3 = l1+l2
d1 = defaultdict(list)
for k,v in l3:
d1[k].append(v)
它给出了输出:
{
"name": ["media", "media"],
"type": ["folder", "folder"],
"children": [{
"name": "test_pendrive",
"type": "folder",
"children": {
"name": "dance",
"type": "folder",
"children": {
"name": "billie_jean.mp3",
"type": "file"
}
}
},
{
"name": "test_pendrive",
"type": "folder",
"children": {
"name": "pop",
"type": "folder",
"children": {
"name": "thriller.mp3",
"type": "file"
}
}
}
]
}
这几乎就是我想要的。我的最终目标是:
{
"name": ["media", "media"],
"type": ["folder", "folder"],
"children": [{
"name": "test_pendrive",
"type": "folder",
"children": [{
"name": "dance",
"type": "folder",
"children": {
"name": "billie_jean.mp3",
"type": "file"
}
},{
"name": "pop",
"type": "folder",
"children": {
"name": "thriller.mp3",
"type": "file"
}
}]
}
}
我哪里错了?这是实现该目标的最佳方法吗?提前致谢。
【问题讨论】:
-
你用的是哪个版本的python 3.x+ 还是2.7?
-
我可能是错的,但是如果有更多的上下文(数据来自哪里,您的最终目标是什么),我认为我们可能能够更好地帮助您。在我看来,您好像在尝试以编程方式重现合并两个文件树的效果。
-
不清楚你想做什么。例如,在原始树中,“pop”在“test_pendrive”中,而之后不是。但是“舞蹈”确实保留在“test_pendrive”中。为什么他们会受到不同的对待?此外,您的代码将单例放入列表中,而您的输出表明您不想这样做?
-
@TLOwater 我正在使用 Python 3.5.2
-
@strubbly Weel,pop 仍然在 test_pendrive 中。现在,pop 和 dance 作为 test_pendrive 的子项在列表中。
标签: python dictionary