Найти - Пользователи
Полная версия: Создание дерева потомков из списка списков наследования
Начало » Центр помощи » Создание дерева потомков из списка списков наследования
1
qnica
Есть список в котором содержаться списки наследования потомков. К примеру такой:
[
    ['foo', 'bar1', 'baz'],
    ['foo', 'bar1', 'bat'],
    ['foo', 'bar2', 'bat'],
    ['qwe', 'asd', '']
]
Из него надо сделать словарь который из себя будет представлять дерево наследования:
{
    'foo': {
        'bar1': {
            'baz' : {},
            'bat' : {},
        },
        'bar2': {
            'bat' : {},
        }
    },
    'qwe': {
        'asd': {}
    }
}

Если у какого-то есть идеи как это делается по другому, говорите.
bismigalis
чтто-то у тебя не логичный вывод какой-то
qnica
bismigalis, простите, что-то фигню написал. Поправил.
alrusdi
Использовать библиотеку для создания/модификации деревьев - например http://www.stat.washington.edu/~hoytak/code/treedict/overview.html или https://github.com/cortesi/tinytree
bismigalis
#!/usr/bin/env python
def assoc_in(m, ks, v):
    """Inspired by http://clojuredocs.org/clojure_core/clojure.core/assoc-in"""
    m = m or {}
    k = ks[0]
    ks= ks[1:]
    if ks:
        m[k] = assoc_in(m.get(k, {}), ks, v)
    else:
        m[k] = v
    return m
#
lst = [
    ['foo', 'bar1', 'baz'],
    ['foo', 'bar1', 'bat'],
    ['foo', 'bar2', 'bat'],
    ['qwe', 'asd', '']
]
#
reduce(lambda m, line: assoc_in(m, 
                                filter(None, line),
                                {}),
       lst,
       {})
qnica
bismigalis, спасибо выглядит похожим на то что я искал.
Inspired by http://clojuredocs.org
Как-то смотрел доклад Александра Соловьева с JavaScript Frameworks Day 2013, и там он как раз очень интересно рассказывал про clojure. Кто еще не смотрел, очень рекомендую
bismigalis
Именно после просмотра этого одухотворенного доклада я и заинтересовался clojure :)
smoke853
Тоже после этого доклада начал изучать clojure, доклад смотрится на одном дыхании
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB