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

时间:2019-04-17 17:41:12

标签: python python-3.x

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

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

3 个答案:

答案 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)