Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 16, 2014 09:10:54

qnica
Зарегистрирован: 2014-01-16
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание дерева потомков из списка списков наследования

Есть список в котором содержаться списки наследования потомков. К примеру такой:

[
    ['foo', 'bar1', 'baz'],
    ['foo', 'bar1', 'bat'],
    ['foo', 'bar2', 'bat'],
    ['qwe', 'asd', '']
]
Из него надо сделать словарь который из себя будет представлять дерево наследования:
{
    'foo': {
        'bar1': {
            'baz' : {},
            'bat' : {},
        },
        'bar2': {
            'bat' : {},
        }
    },
    'qwe': {
        'asd': {}
    }
}

Если у какого-то есть идеи как это делается по другому, говорите.

Отредактировано qnica (Янв. 16, 2014 10:16:02)

Офлайн

#2 Янв. 16, 2014 09:57:46

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Создание дерева потомков из списка списков наследования

чтто-то у тебя не логичный вывод какой-то

Отредактировано bismigalis (Янв. 16, 2014 10:00:08)

Офлайн

#3 Янв. 16, 2014 10:17:07

qnica
Зарегистрирован: 2014-01-16
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание дерева потомков из списка списков наследования

bismigalis, простите, что-то фигню написал. Поправил.

Офлайн

#4 Янв. 16, 2014 10:25:11

alrusdi
Зарегистрирован: 2013-09-30
Сообщения: 20
Репутация: +  8  -
Профиль   Отправить e-mail  

Создание дерева потомков из списка списков наследования

Использовать библиотеку для создания/модификации деревьев - например http://www.stat.washington.edu/~hoytak/code/treedict/overview.html или https://github.com/cortesi/tinytree

Отредактировано alrusdi (Янв. 16, 2014 10:28:18)

Офлайн

#5 Янв. 16, 2014 12:42:42

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Создание дерева потомков из списка списков наследования

#!/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,
       {})

Отредактировано bismigalis (Окт. 11, 2014 15:18:09)

Офлайн

#6 Янв. 16, 2014 14:16:00

qnica
Зарегистрирован: 2014-01-16
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Создание дерева потомков из списка списков наследования

bismigalis, спасибо выглядит похожим на то что я искал.

Inspired by http://clojuredocs.org
Как-то смотрел доклад Александра Соловьева с JavaScript Frameworks Day 2013, и там он как раз очень интересно рассказывал про clojure. Кто еще не смотрел, очень рекомендую

Офлайн

#7 Янв. 16, 2014 14:24:56

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Создание дерева потомков из списка списков наследования

Именно после просмотра этого одухотворенного доклада я и заинтересовался clojure :)

Офлайн

#8 Янв. 16, 2014 14:41:27

smoke853
Зарегистрирован: 2012-10-02
Сообщения: 123
Репутация: +  15  -
Профиль   Отправить e-mail  

Создание дерева потомков из списка списков наследования

Тоже после этого доклада начал изучать clojure, доклад смотрится на одном дыхании

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version