我正在使用Python 3.7.2。我有这样的JSON对象:
cars = {'cars' : [
{'id': '1', 'language': 'en', 'carDescription': 'this car is nice'},
{'id': '2', 'language': 'en', 'carDescription': 'this is a blue Ford'},
{'id': '3', 'language': 'en', 'carDescription': 'this is a red Chevy'}
]}
我想打印出汽车的ID和描述,我这样做:
# print car id and carDescription
for num, sentence in enumerate(cars['cars'], start=0):
print("Car {} : {}".format(num, cars['cars'][num]['carDescription']))
但是,有了这个,'num'总是落后于实际id,因为它从0开始。
但是,如果我改变start = 1,它确实从1开始计数,但它跳过第一行并且只打印2和3,我也在最后得到这个错误:
IndexError:列表索引超出范围
如何在没有出现错误的情况下打印出id和相关的cardDescription?
顺便说一下,我知道我还没有使用“句子”。
为什么不使用id
作为索引本身?使用f
-strings并且在您的Python版本中支持它,您可以:
for x in cars['cars']:
print(f"Car {x['id']}: {x['carDescription']}")
# Car 1: this car is nice
# Car 2: this is a blue Ford
# Car 3: this is a red Chevy
你将这个数字用于两件事:一个计数和一个索引。
您希望计数从1开始,索引从0开始。
Start = 1增加num,但它仍然从第0辆车开始计算。换句话说,你最终还是有三个nums(1,2和3)。对于三辆汽车,num将索引第二辆(索引1)然后第三辆(索引2)然后因索引错误而失败,因为索引3处没有第四辆汽车。
试试这个
for num, sentence in enumerate(cars['cars'], start=0):
print("Car {} : {}".format(num + 1, cars['cars'][num]['carDescription']))
我检查它是否是字典,然后我只显示id和汽车描述值。
for key,value in enumerate(cars['cars']):
if isinstance(value,dict):
for car_key,car_val in value.items():
if car_key is 'id':
print("Car ",car_val,end="")
elif car_key is 'carDescription':
print(" ",car_val)