python - json python的递归解析
问题描述
这是我的json:
{
"articles": [
{
"Quality": "Super",
"Quantity": 20,
"factor": 0.2
},
{
"Quality": "medium",
"Quantity": 10,
"factor": 0.3
},
{
"Quality": "mix",
"factor": 0.5,
"articles": [
{
"Quality": "super",
"Quantity": 50,
"factor": 0.3
},
{
"Quality": "medium",
"Quantity": 30,
"factor": 0.2
}
]
}
]
}
我需要这样计算结果:
[20 * 0.2*get_price() + 10 * 0.3*get_price() + 0.5 (50*0.3*get_price() + 30*0.2*get_price())] / sum(0.2+0.3+0.5*0.3 + 0.5*0.2)
这很棘手,我试着去做,但我想我错过了calculate()
函数中的一些细节和MixPricer
get_price()
是商品的价格,它是quality
作为工厂实现的功能。
我尝试使用面向对象的方法来实现这一点:
class ArticleQual(metaclass=ABCMeta):
PRICES = 0.0
FACTORS = []
def __init__(self, article):
self.article = article
@property
def factor(self):
if 'factor' in self.article:
factor_ = self.article['factor']
else:
factor_ = 0.001 # default factor
return factor_
@abc.abstractmethod
def get_price(self):
pass
raise ValueError("source type does not exist!")
class PriceFactory:
def get_price_calculator(self, article):
if article['Quality'] == 'super':
return SuperPricer(article)
elif article['Quality'] == 'medium':
return MediumPricer(article)
elif article['Quality'] == "mix":
return MixPricer(article)
else:
raise ValueError("quality value does not exist!")
class SuperPricer(ArticleQual):
def __init__(self, article):
super().__init__(article)
def get_price(self):
return self.factor * 100.0
class MediumPricer(ArticleQual):
def __init__(self, article):
super().__init__(article)
def get_price(self):
return self.factor * 50.0
class MixPricer(ArticleQual):
def __init__(self, article):
super().__init__(article)
def get_price(self):
return self.factor * calculate(self.article)
def calculate(data):
if isinstance(data, dict):
for k, v in data.items():
if k == 'articles':
if isinstance(v, list):
for art in v:
pricer = PriceFactory().get_price_calculator(article=art)
ArticleQual.PRICES = ArticleQual.PRICES + pricer.get_price()
ArticleQual.FACTORS.append(pricer.factor)
return ArticleQual.PRICES
感谢试一试!
解决方案
推荐阅读
- reactjs - 反应引导卡图像没有出现
- reactjs - 在 React 中动态填充表行的设置状态
- java - 在目的地复制文件并重命名文件
- java - 提供数据SQL输入的日期时间
- odoo - 如何在操作菜单odoo下编写删除组?
- java - 通过忽略所有现有消息开始仅使用来自 Kafka 主题的最新消息
- python - CS50 Python & JS Web:尝试“迁移”后无法操作网站
- java - 在 android studio 上运行时,资源“attr/actionBarSize”的重复值与配置“DEFAULT”和产品“保持一致”
- java - Java中的快捷键(助记符)
- excel - 如何为匹配的单元格自动复制不同工作表中的条目