我正在使用Python 3.7.2。我有这样的JSON对象:
[
{
"id": 1,
"card_count_in_book": 10,
"card_count_in_deck": 1,
"name": "my spell",
"type": "spell",
"cost": 120
}
]
我想打印出汽车的ID和描述,就像这样:
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'}
]}
但是,由于这个数字从0开始,因此'num'总是比实际ID落后1。
但是,如果我更改 start = 1 ,它的确从1开始计数,但是它跳过了第一行,仅打印2和3,并且在结尾处也出现了此错误:< / p>
IndexError:列表索引超出范围
如何在不出现该错误的情况下打印出ID和相关的cardDescription?
顺便说一句,我确实知道我还没有使用“句子”。
答案 0 :(得分:3)
为什么不使用id
作为索引本身?使用f
字符串,并且您的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 :(得分:3)
您将num用于两件事:计数和索引。
您希望计数从1开始,索引从0开始。
“开始” = 1增加了num,但仍然从第0辆汽车开始计数。换句话说,您仍然以三个数字(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']))
答案 2 :(得分:0)
我检查它是否是字典,然后仅显示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)