python - 大神们,求个算法
本文介绍了python - 大神们,求个算法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
现有如下数据结构:
data = {
"date": {
"buckets": [
{
"key": "2015-01-01",
"shop": {
"buckets": [
{
"key": "A",
"sum_qty": {
"value": 5
},
"sum_amt": {
"value": 10
}
}
]
}
},
{
"key": "2015-06-01",
"shop": {
"buckets": [
{
"key": "B",
"sum_qty": {
"value": 20
},
"sum_amt": {
"value": 100
}
}
]
}
}
]
}
}
最终结果:
lst = [
{'date': '2015-01-01', 'shop': 'A', 'sum_qty': 5, 'sum_amt': 10},
{'date': '2015-06-01', 'shop': 'B', 'sum_qty': 20, 'sum_amt': 100}
]
print lst
解决方案
寫了一個 class, 結果應該跟你要的一樣:
from collections import abc
class CoolJSON:
def __init__(self, key, mapping):
"""
key is the main key of this CoolJSON
mapping is the total data
"""
self.key = key
self.mapping = dict(mapping)
def collect_bucket_item(self, item):
""" used to handle single bucket item"""
dic = {}
lst = [{}]
for key, value in item.items():
if key=='key':
dic[self.key] = value
elif isinstance(value, abc.MutableMapping):
if 'buckets' in value:
lst = CoolJSON(key, value).collect()
elif 'value' in value:
dic[key] = value['value']
for item in lst:
item.update(dic)
return lst
def collect(self):
"""used to collect results from all bucket items"""
results = []
for item in self.mapping['buckets']:
results.extend(self.collect_bucket_item(item))
return results
測試:
# 測資使用 prolife 在評論下方新給的測資
lst = CoolJSON('date', data['date']).collect()
for item in lst:
print(item)
結果:
{'sum_amt': 3651755, 'sum_qty': 36927, 'date': '2015-02-01', 'shop': 'A'}
{'sum_amt': 436019, 'sum_qty': 12115, 'date': '2015-02-01', 'shop': 'B'}
{'sum_amt': 1310549, 'sum_qty': 8896, 'date': '2015-02-01', 'shop': 'C'}
{'sum_amt': 18620841, 'sum_qty': 212909, 'date': '2015-03-01', 'shop': 'A'}
{'sum_amt': 5105368, 'sum_qty': 40109, 'date': '2015-03-01', 'shop': 'B'}
{'sum_amt': 938102, 'sum_qty': 28156, 'date': '2015-03-01', 'shop': 'C'}
我知道這可能不是你要的答案, 不過我不是很清楚你遇到的資料的狀況, 所以我先拋出一版, 再來看怎麼調整到可以處理你的需求, 以下是一個把這份資料想得很單純的無腦寫法:
lst = []
for item in data['date']['buckets']:
dic = {}
dic['date'] = item['key']
dic['shop'] = item['shop']['buckets'][0]['key']
dic['sum_qty'] = item['shop']['buckets'][0]['sum_qty']['value']
dic['sum_amt'] = item['shop']['buckets'][0]['sum_amt']['value']
lst.append(dic)
print(lst)
我回答過的問題: Python-QA
这篇关于python - 大神们,求个算法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文