使用Python 3 for循环来枚举对象和打印属性

问题描述 投票:0回答:3

我正在使用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?

顺便说一下,我知道我还没有使用“句子”。

python python-3.x
3个回答
3
投票

为什么不使用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

3
投票

你将这个数字用于两件事:一个计数和一个索引。

您希望计数从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']))

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)
© www.soinside.com 2019 - 2024. All rights reserved.