我有一系列字典如下:
test = [
{
'name': '30 d',
'description': [
{'label': 'fuel_type', 'value': 'DIESEL'},
{'label': 'displacement[cc]', 'value': '2993'},
{'label': 'power[hp]', 'value': '208'},
{'label': 'power[PS]', 'value': '211'},
{'label': 'power[kW]', 'value': '155'}
],
'href': 'http://ws.indicata.com/cherry-rs/api/vivi/BE?body=4954&category=PASSENGER&model=24&engine=9434®date=2017&make=39&facelift=1569', 'type': 'application/json', 'rel': 'engine'
},
{
'name': '30 c',
'description': [
{'label': 'fuel_type', 'value': 'DIESEL'},
{'label': 'displacement[cc]', 'value': '2993'},
{'label': 'power[hp]', 'value': '255'},
{'label': 'power[PS]', 'value': '258'},
{'label': 'power[kW]', 'value': '190'}
],
'href': 'http://ws.indicata.com/cherry-rs/api/vivi/BE?body=4954&category=PASSENGER&model=24&engine=7975®date=2017&make=39&facelift=1569', 'type': 'application/json', 'rel': 'engine'
},
{
'name': '35 i',
'description': [
{'label': 'fuel_type', 'value': 'PETROL'},
{'label': 'displacement[cc]', 'value': '2979'},
{'label': 'power[hp]', 'value': '302'},
{'label': 'power[PS]', 'value': '306'},
{'label': 'power[kW]', 'value': '225'}
],
'href': 'http://ws.indicata.com/cherry-rs/api/vivi/BE?body=4954&category=PASSENGER&model=24&engine=7977®date=2017&make=39&facelift=1569', 'type': 'application/json', 'rel': 'engine'
}
]
我想循环使用它,我希望得到类似的东西:
Diesel
30 d 155kw 2993cc 211
30 c 190kw 2993cc 258
Petrol
35 i 225kw 2979cc 306
知道我该怎么做?
我是python的新手,因此欢迎任何帮助。
答案 0 :(得分:4)
在不知道您希望获得结果的数据/集合类型的情况下,以下内容将打印您想要的结果。
from collections import OrderedDict
engines = OrderedDict()
engines['DIESEL'] = []
engines['PETROL'] = []
for engine in test:
eng_type = engine['description'][0]['value']
name = engine['name']
disp = engine['description'][1]['value']
ps = engine['description'][3]['value']
kw = engine['description'][4]['value']
engines[eng_type].append([name, kw, disp, ps])
for engine_type, engine_list in engines.items():
print(engine_type)
for engine_vals in engine_list:
print('{}\t{}kw\t{}cc\t{}'.format(*engine_vals))
print()
输出:
DIESEL
30 d 155kw 2993cc 211
30 c 190kw 2993cc 258
PETROL
35 i 225kw 2979cc 306
答案 1 :(得分:2)
第一步是迭代初始列表中的每个项目。看起来每个项目都可以被视为汽车。然后,您只需要提取您感兴趣的所有信息。 由于您希望将car_type打印为标题,因此使用带有键作为car_type的字典存储信息,将值存储为包含属于此车型的所有车辆的信息的列表。
test = [
{
'name': '30 d',
'description': [
{'label': 'fuel_type', 'value': 'DIESEL'},
{'label': 'displacement[cc]', 'value': '2993'},
{'label': 'power[hp]', 'value': '208'},
{'label': 'power[PS]', 'value': '211'},
{'label': 'power[kW]', 'value': '155'}
],
'href': 'http://ws.indicata.com/cherry-rs/api/vivi/BE?body=4954&category=PASSENGER&model=24&engine=9434®date=2017&make=39&facelift=1569', 'type': 'application/json', 'rel': 'engine'
},
{
'name': '30 c',
'description': [
{'label': 'fuel_type', 'value': 'DIESEL'},
{'label': 'displacement[cc]', 'value': '2993'},
{'label': 'power[hp]', 'value': '255'},
{'label': 'power[PS]', 'value': '258'},
{'label': 'power[kW]', 'value': '190'}
],
'href': 'http://ws.indicata.com/cherry-rs/api/vivi/BE?body=4954&category=PASSENGER&model=24&engine=7975®date=2017&make=39&facelift=1569', 'type': 'application/json', 'rel': 'engine'
},
{
'name': '35 i',
'description': [
{'label': 'fuel_type', 'value': 'PETROL'},
{'label': 'displacement[cc]', 'value': '2979'},
{'label': 'power[hp]', 'value': '302'},
{'label': 'power[PS]', 'value': '306'},
{'label': 'power[kW]', 'value': '225'}
],
'href': 'http://ws.indicata.com/cherry-rs/api/vivi/BE?body=4954&category=PASSENGER&model=24&engine=7977®date=2017&make=39&facelift=1569', 'type': 'application/json', 'rel': 'engine'
}
]
to_print = {}
for car in test:
car_type = car['description'][0]['value'].title()
name = car['name']
power_kw = car['description'][4]['value'] + 'kw'
displacement = car['description'][1]['value'] + 'cc'
power_ps = car['description'][3]['value']
try:
to_print[car_type].append('\t'.join([name, power_kw, displacement, power_ps]))
except KeyError:
to_print[car_type] = []
to_print[car_type].append('\t'.join([name, power_kw, displacement, power_ps]))
for car_type in to_print:
print(car_type)
for row in to_print[car_type]:
print(row)