我有一个复杂的定价数据,比如树状结构
示例将类似于计算机价格(显示器价格,主板价格等),在显示器类别中我有更多的子类别,在这些子类别下我有更多的类别(显示器是27英寸,由戴尔制作,这是弯曲的)
我需要经常阅读这些定价信息(只读)数千次。
我想用class来存储这些信息。因为我不知道我是否可以在词典中做到这一点。有人有建议吗?
答案 0 :(得分:1)
Mongodb肯定是一个很好的可能性,但在你的情况下,只有50个条目只读它可能是一种矫枉过正,特别是因为你需要熟悉如何进行查询。
更快捷的方式很可能是通过pandas:使用嵌套字典,最好创建一个输入JSON文件或字符串(如下例所示),然后在做一个pandas数据帧中读取它。
然后您可以按照自己的方式对其进行标准化,并在熊猫中进行必要的计算,您可以更快地学习:
这是一个如何看起来像的例子: http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.io.json.json_normalize.html
>>> data = [{'state': 'Florida',
... 'shortname': 'FL',
... 'info': {
... 'governor': 'Rick Scott'
... },
... 'counties': [{'name': 'Dade', 'population': 12345},
... {'name': 'Broward', 'population': 40000},
... {'name': 'Palm Beach', 'population': 60000}]},
... {'state': 'Ohio',
... 'shortname': 'OH',
... 'info': {
... 'governor': 'John Kasich'
... },
... 'counties': [{'name': 'Summit', 'population': 1234},
... {'name': 'Cuyahoga', 'population': 1337}]}]
>>> from pandas.io.json import json_normalize
>>> result = json_normalize(data, 'counties', ['state', 'shortname',
... ['info', 'governor']])
>>> result
name population info.governor state shortname
0 Dade 12345 Rick Scott Florida FL
1 Broward 40000 Rick Scott Florida FL
2 Palm Beach 60000 Rick Scott Florida FL
3 Summit 1234 John Kasich Ohio OH
4 Cuyahoga 1337 John Kasich Ohio OH
对于上述数据框,您可以轻松获得所有短名称=='FL'的条目的总和,如下所示:
sum_of_fl_population = result[result['shortname']=='FL'].population.sum()
Out[11]: 112345
查看此链接,了解如何处理pandas数据帧。这可能是解决问题的最佳方法。 http://pandas.pydata.org/pandas-docs/stable/10min.html
答案 1 :(得分:0)
我认为存储这些数据的好方法可能是拥有一个计算机对象,它可以有成员变量,如主板,监视器等。
然后,您可以拥有一个包含映射到计算机对象的唯一ID的字典。所以你可以有类似的东西
computers.get('12345').getMotherBoard().getMake()
computers.get('45678').getMonitor().getScreenResolution()
computers.get('54342').getRam().getPrice()
答案 2 :(得分:0)
寻找大数据。
将ElasticSearch,MongoDB,CouchDB或其他许多内容(我猜)放入您的堆栈中,并将每个产品存储为文档,从而使您的基础变得扁平化。
为每种类型的文档创建一个索引(一个用于计算机屏幕,一个用于主板,......),基本上每个类型的对象有一个索引,它们共享相同的属性,您可以随时使用。
对于有关育儿的弹性搜索: https://www.elastic.co/guide/en/elasticsearch/guide/2.x/parent-child.html https://www.elastic.co/guide/en/elasticsearch/guide/2.x/parent-child-mapping.html
我相信这比SQL快,也许更容易使用。但是有一个缺点,没有多少框架允许您使用这样的“新”数据库。虽然为了更好地知道有带ORM的映射器