Как отобразить только определенную часть словаря?

#python

Вопрос:

У меня есть словарь с несколькими ключами, но мне нужно распечатать только его часть, хотя я не знаю, как это сделать.

Выходные данные, которые у меня есть для моего словаря, таковы:

 [{'vin': '4T1R11AK7NU637019', 'askPrice': 28106.0, 'msrp': 28106.0, 'mileage': 0.0, 'isNew': True,  'firstSeen': '2021-11-28', 'lastSeen': '2021-11-28', 'modelName': 'CAMRY', 'brandName': 'TOYOTA', 'year': 2022.0,  'dealerID': 30873, 'color': 'Celestial Silver Metallic', 'interiorColor': 'Black', 'vinDecode': {(A LOT OF THINGS IN HERE}}},   {'vin': '4T1G31AK7NU45B292', 'askPrice': 0.0, 'msrp': 0.0, 'mileage': 0.0, 'isNew': True,  'firstSeen': '2021-11-28', 'lastSeen': '2021-11-28', 'modelName': 'CAMRY', 'brandName': 'TOYOTA', 'year': 2022.0,  'dealerID': 12750, 'color': 'N/A', 'interiorColor': 'N/A', 'vinDecode': {(A LOT OF THINGS IN HERE}}}]  

Таким образом, существует несколько vin s, и я просто хотел бы печатать от vin до interiorColor для каждой записи; полностью игнорируя vinDecode часть. Есть ли какой-нибудь способ, которым я мог бы это сделать?

Ответ №1:

Зацикливайтесь на элементах в диктанте. Пропустите ключ «Виндекод».

 for key, value in mydict.items():  if key != 'vinDecode':  print(f'{key}={value}')  

Ответ №2:

Вы не можете этого сделать и в любом случае не должны, потому что, если вы не сможете контролировать источник этих данных, в будущем могут появиться новые ключи.

Лучше всего создать список ключей, которые вас интересуют, и распечатать только те:

 my_list_of_dicts = [  {'vin': '4T1R11AK7NU637019', 'askPrice': 28106.0, 'msrp': 28106.0, 'mileage': 0.0, 'isNew': True,  'firstSeen': '2021-11-28', 'lastSeen': '2021-11-28', 'modelName': 'CAMRY', 'brandName': 'TOYOTA', 'year': 2022.0,  'dealerID': 30873, 'color': 'Celestial Silver Metallic', 'interiorColor': 'Black', 'vinDecode': []},  {'vin': '4T1G31AK7NU45B292', 'askPrice': 0.0, 'msrp': 0.0, 'mileage': 0.0, 'isNew': True,  'firstSeen': '2021-11-28', 'lastSeen': '2021-11-28', 'modelName': 'CAMRY', 'brandName': 'TOYOTA', 'year': 2022.0,  'dealerID': 12750, 'color': 'N/A', 'interiorColor': 'N/A', 'vinDecode': []}]  keys_i_am_interested_in = {'vin', 'askPrice', 'interiorColor'}  for d in my_list_of_dicts:  print({k: v for k, v in d.items() if k in keys_i_am_interested_in})  

это приведет к печати

 {'vin': '4T1R11AK7NU637019', 'askPrice': 28106.0, 'interiorColor': 'Black'} {'vin': '4T1G31AK7NU45B292', 'askPrice': 0.0, 'interiorColor': 'N/A'}  

Ответ №3:

Вы можете использовать .pop() словарь для удаления данных:

 for item in items:  item.pop("vinDecode")  print(item)  

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

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

2. @LukeNelson хорошая мысль! Если вам нужно сохранить исходные данные, вы можете использовать deepcopy их из copy модуля.

3. Вместо deepcopy того, чтобы использовать, а затем удалить один из ключей, используя понимание словаря, возможно, было бы лучшей идеей.

Ответ №4:

Вы также можете создать измененный список, содержащий словари с vindecode удаленными. Позже вы сможете распечатать его.

  vin_dict = [{'vin': '4T1R11AK7NU637019', 'askPrice': 28106.0, 'msrp': 28106.0, 'mileage': 0.0, 'isNew': True, 'firstSeen': '2021-11-28', 'lastSeen': '2021-11-28', 'modelName': 'CAMRY', 'brandName': 'TOYOTA', 'year': 2022.0, 'dealerID': 30873, 'color': 'Celestial Silver Metallic', 'interiorColor': 'Black', 'vinDecode': ''}, {'vin': '4T1G31AK7NU45B292', 'askPrice': 0.0, 'msrp': 0.0, 'mileage': 0.0, 'isNew': True, 'firstSeen': '2021-11-28', 'lastSeen': '2021-11-28', 'modelName': 'CAMRY', 'brandName': 'TOYOTA', 'year': 2022.0, 'dealerID': 12750, 'color': 'N/A', 'interiorColor': 'N/A', 'vinDecode': ''}]   # Remove specific Key from Dictionary List modified_vin_dict = [{key : val for key, val in vin.items() if key != 'vinDecode'} for vin in vin_dict]  for d in modified_vin_dict:  for k, v in d.items():  print(f'{k}:{v}')