如何使用Python dict动态创建树

时间:2013-06-20 23:56:07

标签: python dictionary tree

我将使用python dict创建一个树,在此之前不知道级别和节点的确切数量。

例如,我将循环许多具有3个属性的项目:大小,颜色和重量。在每个循环中,我做了以下事情

item_data = {}
for item in items:
    size, color, weight = item.get_attr()
    if size not in item_data:
        item_data[size] = {}
    if color not in item_data[size]:
        item_data[size][color] = {}
    if weight not in item_data[size][color]:
        item_data[size][color][weight] = []
    # Do something to the tree...

最后我得到了这样的词典

item_data == {'L':{
                  'red':{45:[...], 
                         50:[...]}, 
                  'green':{
                         40:[...]}}, 
              'XL':{...}}

但这不灵活。例如,如果我想添加另一个属性,如'价格'?我必须知道它并在上面的代码中添加一个。

我正在考虑以下列方式进行,但不知道如何在几行内完成

attrs = [item.get_attr()]
for attr in attrs:
    # Create the tree here..

提前致谢!

1 个答案:

答案 0 :(得分:1)

在此处查看networkx是否相关。否则,这是一个扩展您使用attr循环(代码未测试)的想法的基本版本。

for item in items:
    tree = item_data
    for i,attr in enumerate(item.get_attr()):
        if attr not in tree.keys():
            if i<len(item.get_attr())-1:
                tree[attr] = {}
            else:
                tree[attr] = []
        else:
            tree = tree[attr]
    # do something to the tree