Python-从字典创建树
我有一个问题,我必须创建一个函数,从任意数量的元素字典创建树。 词典示例:Python-从字典创建树,python,dictionary,tree,Python,Dictionary,Tree,我有一个问题,我必须创建一个函数,从任意数量的元素字典创建树。 词典示例: D1 = {'name': 'musica', 'children': [ {'name': 'rock', 'children': [ {'name': 'origini', 'children': []}, {'name': 'rock&roll', 'children': []},
D1 = {'name': 'musica',
'children': [
{'name': 'rock',
'children': [
{'name': 'origini', 'children': []},
{'name': 'rock&roll', 'children': []},
{'name': 'hard rock', 'children': []}]},
{'name': 'jazz',
'children': [
{'name': 'origini',
'children': [{'name': '1900',
'children': [{'name': 'origini', 'children': []}]}]},
{'name': 'ragtime', 'children': []},
{'name': 'swing', 'children': []}]}]}
D2 = {'name': 'html',
'children': [
{'name': 'head',
'children': [
{'name': 'meta', 'children': []},
{'name': 'title', 'children': []},
{'name': 'style', 'children': []}]},
{'name': 'body',
'children': [
{'name': 'h1', 'children': []},
{'name': 'section',
'children': [
{'name': 'p',
'children': [
{'name': 'strong', 'children': []},
{'name': 'b', 'children': []},
{'name': 'em', 'children': []},
{'name': 'i', 'children': []}]},
{'name': 'p',
'children': [
{'name': 'q', 'children': []},
{'name': 'code', 'children': []},
{'name': 'kbd', 'children': []}]},
{'name': 'p',
'children': [
{'name': 'sup', 'children': []},
{'name': 'sub', 'children': []}]},
{'name': 'p',
'children': [
{'name': 'span', 'children': []}]}]},
{'name': 'footer',
'children': [
{'name': 'a',
'children': [
{'name': 'strong', 'children': []}]},
{'name': 'a',
'children': [
{'name': 'strong', 'children': []}]}]}]}]}
D3 = {'name': 'Giovanni di Bicci',
'children': [
{'name': 'Cosimo il vecchio',
'children': [
{'name': 'Piero il gottuso',
'children': [
{'name': 'Lorenzo il magnifico',
'children': [
{'name': 'Piero II',
'children': [
{'name': 'Lorenzo II', 'children': []}]},
{'name': 'Papa Leone X', 'children': []},
{'name': 'Giuliano', 'children': []}]}]},
{'name': 'Giovanni Carlo', 'children': []}]},
{'name': 'Lorenzo',
'children': [
{'name': 'Pierfrancesco',
'children': [
{'name': 'Lorenzo', 'children': []},
{'name': 'Giovanni',
'children': [
{'name': 'Giovanni dalle Bande Nere',
'children': [
{'name': 'Lorenzino', 'children': []},
{'name': 'Cosimo I',
'children': [
{'name': 'Francesco I',
'children': [
{'name': 'Maria', 'children': []}]},
{'name': 'Ferdinando I',
'children': {}}]}]}]}]}]}]}
有解决办法吗
非常感谢
附加
谢谢大家的回答
现在,我编写完整的练习,以便您更好地理解和回答我:实际上,我已经实现了一个用以下方法生成的类TNode:
class TNode(object):
def __init__(self, name, Sinistra= None, Destra= None):
self._name = name
self.Destra = Destra
self.Sinistra = Sinistra
self._children = []
self._copy = []
self.c = c
def add(self, c):
self._children.append(c)
def children(self):
self._copy = self._children
return self._copy
def height(self):
h = 1
for node in self._children:
h = max(h, node.height() + 1)
return h
def count(self):
c = 1
for node in self._children:
c += node.count()
return c
def count_by_name(self, name):
lst = []
if self._name == name:
lst += [self]
for node in self._children:
lst += node.count_by_name(name)
return lst
def leaves(self):
leaves_s = []
if not self._children:
leaves_s.append(self.c)
for node in self._children:
leaves_s.update(node.leaves())
return len(leaves_s)
def paths(self, name):
paths_s = set()
if self._name == name:
paths_s.add((name,))
for node in self._children:
for j in node.paths(name):
paths_s.add((self._name,)+j)
return paths_s
我还需要创建一个函数create_tree(d),该函数取一个表示树的字典“d”,创建具有TNode类型节点的对应树并返回根。函数必须按照键“children”列表中列出的顺序添加子项
很抱歉,如果最初我没有写这些
我无法创建引用该类的函数,该函数从字典创建树
我使用Python2.7
谢谢。您可以使用以下内容创建树: 然后使用它:
>>> tree = Tree()
>>> tree['house']['car']['red']['hubcap'] = 1950
你尝试过什么代码?请尝试将你的代码格式化一点。谢谢,我通过添加类编辑了这篇文章,我应该告诉函数create_tree(d)。谢谢你的回答。我通过添加类编辑了这篇文章,我应该告诉函数create_tree(d)。如何更改您的解决方案以使用类Tode()?抱歉,Peter,我不明白,因为在我的消息末尾显示“38分钟前编辑的Peter Wood 8.934”。。。如果我点击,就会出现:“让字典适合屏幕”…这是什么意思?对不起,我是新来的。ThanksI编辑了您的问题,因为示例数据不适合整个屏幕,并且很难阅读。结构不明显。希望现在更清楚了。我想你可能发布了太多的数据。一点点就足以让你产生这个想法。问问题时,最好不要把所有的东西都扔掉。尽可能具体地描述你的问题,你不理解的东西,把其他的东西都去掉。如果一行代码不能使您的示例更清晰,请将其删除。但是要确保这个例子能够重现这个问题。好的,我明白了,非常感谢你的建议。我希望我已经以一种可以理解的方式解释了我的问题:创建一个函数create_tree(d),该函数使用一个表示树的字典“d”,创建具有类型为TNode的节点的对应树并返回根。函数必须按照键“children”列表中列出的顺序添加子项。你知道我该怎么做吗?谢谢。好吧,堆栈溢出的神奇之处在于你可以看到整个世界。一旦你开始要求个人(我)解决你的问题,你就失去了SO的价值。我没有时间进一步回答。当然,我知道如何实现它,但我不是一名家庭教师,这不是为什么。试着自己迈出下一步,如果你不知道,问一个非常具体的问题,不是问我,而是问某人。我是SO的一部分,所以也许我会看到它并回答。
>>> tree = Tree()
>>> tree['house']['car']['red']['hubcap'] = 1950