python排序json中的元素



我使用Firebase并得到一个示例JSON,每行的第一个元素是由Firebase生成的:

{
"MyTestData" : {
"-MU7wHvQcPHaD92TBkox" : "{"date": "2021-02-22", "time": "16:53:04", "efficiency": 61}",
"-MU7wIAFTFfbnx_Y0JNo" : "{"date": "2021-02-22", "time": "16:53:05", "efficiency": 34}",
"-MU7wIQ0L420rJDPwsjh" : "{"date": "2021-02-22", "time": "16:53:06", "efficiency": 79}",
"-MU7wIeTeJYTyq3fRFv-" : "{"date": "2021-02-22", "time": "16:53:07", "efficiency": 76}",
"-MU7wItnrzEHLIi5sjP3" : "{"date": "2021-02-22", "time": "16:53:08", "efficiency": 63}",
"-MU7wJ8fmHytV4uHjc0B" : "{"date": "2021-02-22", "time": "16:53:09", "efficiency": 71}",
"-MU7wLt2Esdld_xngP3e" : "{"date": "2021-02-22", "time": "16:53:20", "efficiency": 42}",
"-MU7wM7hpZRxat4ZB9Rn" : "{"date": "2021-02-22", "time": "16:53:21", "efficiency": 43}",
"-MU7wMMld85ixbm7AffD" : "{"date": "2021-02-22", "time": "16:53:22", "efficiency": 62}"
}
}

如何使用python提取所有"日期"元素?

以及如何计算"效率"。每个日期?比如2021-02-21是(61+34+79)/3

非常感谢!

您的数据不再符合问题描述(没有20121-02-21),但我认为这是您想要做的。

import json

data = {
"MyTestData" : {
"-MU7wHvQcPHaD92TBkox" : "{"date": "2021-02-22", "time": "16:53:04", "efficiency": 61}",
"-MU7wIAFTFfbnx_Y0JNo" : "{"date": "2021-02-22", "time": "16:53:05", "efficiency": 34}",
"-MU7wIQ0L420rJDPwsjh" : "{"date": "2021-02-22", "time": "16:53:06", "efficiency": 79}",
"-MU7wIeTeJYTyq3fRFv-" : "{"date": "2021-02-22", "time": "16:53:07", "efficiency": 76}",
"-MU7wItnrzEHLIi5sjP3" : "{"date": "2021-02-22", "time": "16:53:08", "efficiency": 63}",
"-MU7wJ8fmHytV4uHjc0B" : "{"date": "2021-02-22", "time": "16:53:09", "efficiency": 71}",
"-MU7wLt2Esdld_xngP3e" : "{"date": "2021-02-22", "time": "16:53:20", "efficiency": 42}",
"-MU7wM7hpZRxat4ZB9Rn" : "{"date": "2021-02-22", "time": "16:53:21", "efficiency": 43}",
"-MU7wMMld85ixbm7AffD" : "{"date": "2021-02-22", "time": "16:53:22", "efficiency": 62}"
}
}
d = {}
for s in data['MyTestData'].values():
j = json.loads(s)
if j['date'] not in d:
d[j['date']] = []
d[j['date']].append(j['efficiency'])

for k, v in d.items():
print(k, sum(v) / len(v)) 

结果如下:

(u'2021-02-22', 59)

添加了新的日期值,给出了解决方案,请查看

import json
data = {
"MyTestData":{
"-MU7wHvQcPHaD92TBkox":"{"date": "2021-02-22", "time": "16:53:04", "efficiency": 61}",
"-MU7wIAFTFfbnx_Y0JNo":"{"date": "2021-02-22", "time": "16:53:05", "efficiency": 34}",
"-MU7wIQ0L420rJDPwsjh":"{"date": "2021-02-22", "time": "16:53:06", "efficiency": 79}",
"-MU7wIeTeJYTyq3fRFv-":"{"date": "2021-02-22", "time": "16:53:07", "efficiency": 76}",
"-MU7wItnrzEHLIi5sjP3":"{"date": "2021-02-22", "time": "16:53:08", "efficiency": 63}",
"-MU7wJ8fmHytV4uHjc0B":"{"date": "2021-02-22", "time": "16:53:09", "efficiency": 71}",
"-MU7wLt2Esdld_xngP3e":"{"date": "2021-02-22", "time": "16:53:20", "efficiency": 42}",
"-MU7wM7hpZRxat4ZB9Rn":"{"date": "2021-02-22", "time": "16:53:21", "efficiency": 43}",
"-MU7wMMld85ixbm7AffD":"{"date": "2021-02-22", "time": "16:53:22", "efficiency": 62}",
"-MU7wMMld85ixbm7AffD":"{"date": "2021-02-21", "time": "16:53:22", "efficiency": 25}"
}
}
def efficiency_cal(k,v):
return {
k: sum(v)/len(v)
}
efficiency_dict = {}
for x in data['MyTestData'].values():
y = json.loads(x)
date = y['date']
efficiency = y['efficiency']
try:
//To maintain data based on dates
efficiency_dict[date] += [efficiency]
except KeyError as e:
efficiency_dict[date] = [efficiency]
res = list(map(efficiency_cal,efficiency_dict.keys(),efficiency_dict.values()))
print(res)
[{'2021-02-22': 58.625}, {'2021-02-21': 25.0}]

最新更新