Повторение json в python — требуется только значение для одного ключа в нескольких диктах

#python #json

Вопрос:

У меня есть этот файл Json, и я хочу вывести «navn» с помощью итерации. Мне нужно, чтобы он напечатал: Трактор Билл и ничего больше, как мне это сделать ?

 [  {"navn": "Traktor", "år": 10, "købspris": 10000},  {"navn": "Bil", "år": 20, "købspris": 100000},  {},  {}  ]  

До сих пор у меня есть эта идея Я знаю, что мне нужно импортировать файл json и повторять его, но каждый раз он выдает мне ошибку… Я пробовал искать по всей всемирной паутине, и до сих пор мой код не появился:

 import json def main():  f = open("/Users/maltheschroderjakobsen/Desktop/coding/test/mat.json",)  f = json.load(f)  for key in f["navn"]:  print (key)  main()  

Но каждый раз, когда я пробую что-то еще, это приводит меня к ошибке

Комментарии:

1. Пожалуйста, покажите код. Сказать, что вы получаете ошибку без каких-либо подробностей, просто слишком расплывчато

2. Теперь все в порядке 🙂

Ответ №1:

f похоже, это список, а не словарь:

 for dct in f:  if "navn" in dct: # the elements are dicts!  print(dct["navn"])   

Ответ №2:

Это потому, что в некоторых диктантах нет ключа navn . Используйте dict.get вместо этого:

 import json def main():  file = open("/Users/maltheschroderjakobsen/Desktop/coding/test/mat.json",)  data = json.load(file)  for dct in data:  print(dct.get("navn", "")) main()  

Комментарии:

1. Большое спасибо 🙂

Ответ №3:

Пока в JSON есть только диктанты, вы можете сделать:

 js=''' [  {"navn": "Traktor", "år": 10, "købspris": 10000},  {"navn": "Bil", "år": 20, "købspris": 100000},  {},  {} ]'''   import json   gt;gt;gt; [e['navn'] for e in json.loads(js) if e.get('navn', '')] ['Traktor', 'Bil']  

JSON также может иметь другие типы данных, такие как списки или цифры. Если в JSON есть возможность чего-то другого, кроме a dict , вы можете сделать:

 [e['navn'] for e in json.loads(js) if isinstance(e, dict) and e.get('navn', '')]