2016-09-13 4 views
0

У меня есть таблица базы данных, где каждая строка имеет:Стоимости/Количество Rollup В древовидной структуре - Python

name, 
child1, 
child1_quantity, 
child2, 
child2_quantity, 
child3, 
child3_quantity, 
price 

Эту таблица будет приводиться в питон в виде списка словарей или словаря словарей (Безразлично» неважно). Это будет выглядеть примерно так:

[{name: A, child1: C1, child1_quantity:2, child2:C2, child2_quantity: 1, child3: C3, child3_quantity:3, price: null}, 
{name: C1, child1: C1A, child1_quantity:5, child2: C1B, child2_quantity:2, child3: C1C, child3_quantity:6, price: 3}, 
{name: C2, child1: C2A, child1_quantity:5, child2: C2B, child2_quantity:2, child3: C2C, child3_quantity:10, price: 4}, 
{name: C3, child1: C3A, child1_quantity:3, child2: C3B, child2_quantity:7, child3: C3C, child3_quantity:15, price: null}] 

Проблема Случай: Я хочу, чтобы иметь возможность ввести имя компонента и получить его цену. Если цена указана в таблице, легко, верните ее. Если цена не указана, мы должны рассчитать цену, добавив цены это дети

т.е.
(child1 price x child1 qty) + (child2 price x child2 qty) + ..... 

Но каждый ребенок может/не может иметь цену. Поэтому нам нужно будет спуститься и найти общую стоимость ребенка от своего ребенка, а затем поднять его ... все, пока мы не получим общие цены на детей, а затем подытожим их, чтобы получить цену нашего представляющая интерес. Это рекурсивный тип проблемы, я думаю, но я не могу придумать, как концептуализировать или представлять данные, чтобы сделать мою цель возможной. Могу ли я получить подсказки/указатели? Рекурсивный запрос sql не является вариантом. Я пытаюсь сделать это в структуре данных или объекте python. Благодарю.

ответ

1
def find_price(self, name): 
    if self.dictionary[name]["price"]: 
     return self.dictionary[name]["price"] 
    else: 
     #assuming this is in a class...otherwise use global instead of self 
     return self.find_price(dictionary[name]["child1"])*dictionary[name]["child1_quantity"] + find_price(self.dictionary[name]["child2"])*self.dictionary[name]["child2_quantity"]#.....etc 

это также предполагает, что верхний объект уровня, который считывает данные в это дикция, где имена также служат в качестве ключей в дополнение к их полям имен.

+0

Если вы чувствуете, что это отвечает на вопрос, пожалуйста, также принимайте ответ. –