【发布时间】:2014-01-19 23:00:13
【问题描述】:
我对 Python 还很陌生,但已经解决一个问题已经有一段时间了。 BLS 网站使用 JSON 交换格式。我已经能够处理数据调用以制作输出表文件。但是,与其逐行打印到输出文件,我更愿意构建一个表,我可以按 seriesID(从小到大)对行进行排序,并通过观察(从小到大)对日期条目进行排序。这样做的一个动机是,可以想象列表中观察的顺序可能不会在所有系列中排列(更可能是其他 BLS 数据系列的情况)。我还想将此迁移到动态网页以报告最新的就业统计数据。我在下面有我当前的工作代码。
#JSON call to //api.bls.gov/ retrieve and print "National Employment by Major Industry"
import requests
import json
headers = {'Content-type': 'application/json'}
data = json.dumps({"seriesid": ['CES0000000001','CES1000000001','CES2000000001','CES3000000001','CES4000000001','CES5000000001','CES5500000001','CES6000000001','CES6500000001','CES7000000001','CES8000000001','CES9091000001','CES9092000001','CES9093000001'],"startyear":"2012", "endyear":"2012"})
p = requests.post('http://api.bls.gov/publicAPI/v1/timeseries/data/', data=data, headers=headers)
print p.url
print p.content
json_data = json.loads(p.text)
d_results = json_data['Results'] #Dictionary: seriesID: str, data: list of data by date
l_series = d_results['series'] #List of Dictionaries
makeheader = 'True'
f=open('outfile.csv','w')
for lst in sorted(l_series):
tmp = lst #Dictionary: seriesID: str, data: list of data observation dictionaries
# type(tmp)
tmpp = tmp['data'] #List of data observation dictionaries
if makeheader == 'True':
for ent in tmp['data']:
f.write( ',' + ent['year'] + ":" + ent['period'] ), #create observation marker as YYYY:MM
makeheader = 'False'
f.write('\n')
f.write(tmp['seriesID'] ),
for ent in tmp['data']:
f.write(',' + ent['value'] ),
f.close
我考虑过制作可排序的 seriesID 和观察列表。然后我可以使用这些列表从字典的 json 列表中提取数据,但我不确定在列表中找到正确字典的最佳方法是什么。第一部分如下所示:
# continuation...
s1 = [] # Get and sort series IDs
for ent in l_series:
s1.append(ent['seriesID'])
s1.sort()
d1 = [] # Get and sort observations (currently collected as tubles)
for ent in l_series[0]['data']:
d1.append( (ent['year'] + ":" + ent['period'] , ent['year'] , ent['period']) )
d1.sort()
所以,我希望从这个小组中获得一些有关继续策略的指导。任何想法将不胜感激。
【问题讨论】:
标签: python json dictionary