Как извлечь словарь Python из другого словаря и вернуть некоторые из его ключей

#python #dictionary

#python #словарь

Вопрос:

Я новичок в концепции словаря в Python. У меня есть этот текущий словарь, который содержит другой словарь :

 {
   "count" : 3,
   "document_type" : "list",
   "documents" : [
      {
         "adminc_id" : "5d834741f1e79df70494d614",
         "archived" : false,
         "company_code" : "AAAAAA",
         "created_at" : "2020-09-16T13:07:54.482000 00:00",
         "customer_label" : "pomme",
         "customer_ref" : "fruit",
         "delivered_at" : "2018-11-07T00:00:00 00:00",
         "document_type" : "service",
         "state" : "delivered",
         "subscribed_at" : "2018-11-07T00:00:00 00:00",
         "tag" : "EX46V4YQ",
         "techc_id" : "5d834741f1e79df70494d614",
         "type" : "energy",
         "updated_at" : "2020-09-16T13:07:54.482000 00:00"
      },
      {
         "adminc_id" : "5f6e162958becabad3b64047",
         "archived" : false,
         "company_code" : "BBBBBB",
         "created_at" : "2020-09-25T16:18:05.807000 00:00",
         "document_type" : "service",
         "state" : "subscribed",
         "tag" : "T94893JQ",
         "techc_id" : "5f6e162958becabad3b64047",
         "type" : "telephony",
         "updated_at" : "2020-09-25T16:18:05.807000 00:00"
      },
      {
         "adminc_id" : "5f62071fa6dbcad5bf20d832",
         "archived" : false,
         "company_code" : "AAAAAA",
         "created_at" : "2020-09-25T16:15:27.590000 00:00",
         "document_type" : "service",
         "state" : "subscribed",
         "tag" : "TV47X3XQ",
         "techc_id" : "5f62071fa6dbcad5bf20d832",
         "type" : "telephony",
         "updated_at" : "2020-09-25T16:15:27.590000 00:00"
      }
   ],
   "limit" : 50,
   "offset" : 0
}
  

Я пытаюсь вернуть словарь documents со значением ключей «tag» и «company_code». Я попытался извлечь документ словаря с помощью dict.get(‘document’), но результат возвращается с квадратной скобкой, которая, похоже, не является словарным форматом :

 [
   {
      "adminc_id" : "5d834741f1e79df70494d614",
      "archived" : false,
      "company_code" : "AAAAAA",
      "created_at" : "2020-09-16T13:07:54.482000 00:00",
      "customer_label" : "pomme",
      "customer_ref" : "fruit",
      "delivered_at" : "2018-11-07T00:00:00 00:00",
      "document_type" : "service",
      "state" : "delivered",
      "subscribed_at" : "2018-11-07T00:00:00 00:00",
      "tag" : "EX46V4YQ",
      "techc_id" : "5d834741f1e79df70494d614",
      "type" : "energy",
      "updated_at" : "2020-09-16T13:07:54.482000 00:00"
   },
   {
      "adminc_id" : "5f6e162958becabad3b64047",
      "archived" : false,
      "company_code" : "BBBBBB",
      "created_at" : "2020-09-25T16:18:05.807000 00:00",
      "document_type" : "service",
      "state" : "subscribed",
      "tag" : "T94893JQ",
      "techc_id" : "5f6e162958becabad3b64047",
      "type" : "telephony",
      "updated_at" : "2020-09-25T16:18:05.807000 00:00"
   },
   {
      "adminc_id" : "5f62071fa6dbcad5bf20d832",
      "archived" : false,
      "company_code" : "AAAAAA",
      "created_at" : "2020-09-25T16:15:27.590000 00:00",
      "document_type" : "service",
      "state" : "subscribed",
      "tag" : "TV47X3XQ",
      "techc_id" : "5f62071fa6dbcad5bf20d832",
      "type" : "telephony",
      "updated_at" : "2020-09-25T16:15:27.590000 00:00"
   }
]
  

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

 {
      "company_code" : "AAAAAA",
      "tag" : "EX46V4YQ"
},
{
      "company_code" : "BBBBBB",
      "tag" : "T94893JQ"
},
{
      "company_code" : "AAAAAA",
      "tag" : "TV47X3XQ",
}
  

Может кто-нибудь любезно помочь мне понять, как это работает? Спасибо.

С наилучшими пожеланиями.

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

1. «Формат квадратных скобок» означает, что ваш результат представляет собой список , который также является тем, что yourdict["documents"] есть. В Интернете вы можете найти кучу хороших руководств по использованию списков.

2. documents Запись не является словарем. Это список словарей. Помните: [...] это список, а {...} это словарь (или набор).

Ответ №1:

Словарь в python — одна из самых важных вещей, с которыми вам действительно нужно связаться с точки зрения структуры данных в Python

Если вы хотите извлечь определенное значение из вложенного словаря, вы можете использовать термин двумерной границы.

Например,

 books = {"recipes": {"blt": ["bacon", "lettuce", "tomato", "bread"],
                     "beans_on_toast": ["beans", "bread"],
                     "scrambles eggs": ["eggs", "butter", "milk"],
                     "soup": ["tin of soap"],
                     "pasta": ["pasta", "cheese"]},

         "maintenance": {"stuck": ["oil"],
                         "loose": ["gaffer tape"]}}
  
 print(books["recipes"]["soup"])
print(books["recipes"]["scrambles eggs"])

print(books["maintenance"]["loose"])
  

Этот book словарь сложный disc . Если вы хотите получить доступ к вложенному ключу одного из его значений, вам нужно будет использовать термин двумерной границы.

После отладки это будет результат:

 ['tin of soap']
['eggs', 'butter', 'milk']
['gaffer tape']
  

Вы также можете проверить эти ссылки на Github для получения дополнительных функций и примеров о словаре и структуре данных в целом в python;

Раздел05.9_ShelveChallenge01_Using_Dictionary

Структура данных в Python

Ответ №2:

Решение:

Этот фрагмент кода может решить вашу проблему:

 in_dict = {
   "count" : 3,
   "document_type" : "list",
   "documents" : [
      {
         "adminc_id" : "5d834741f1e79df70494d614",
         "archived" : False,
         "company_code" : "AAAAAA",
         "created_at" : "2020-09-16T13:07:54.482000 00:00",
         "customer_label" : "pomme",
         "customer_ref" : "fruit",
         "delivered_at" : "2018-11-07T00:00:00 00:00",
         "document_type" : "service",
         "state" : "delivered",
         "subscribed_at" : "2018-11-07T00:00:00 00:00",
         "tag" : "EX46V4YQ",
         "techc_id" : "5d834741f1e79df70494d614",
         "type" : "energy",
         "updated_at" : "2020-09-16T13:07:54.482000 00:00"
      },
      {
         "adminc_id" : "5f6e162958becabad3b64047",
         "archived" : False,
         "company_code" : "BBBBBB",
         "created_at" : "2020-09-25T16:18:05.807000 00:00",
         "document_type" : "service",
         "state" : "subscribed",
         "tag" : "T94893JQ",
         "techc_id" : "5f6e162958becabad3b64047",
         "type" : "telephony",
         "updated_at" : "2020-09-25T16:18:05.807000 00:00"
      },
      {
         "adminc_id" : "5f62071fa6dbcad5bf20d832",
         "archived" : False,
         "company_code" : "AAAAAA",
         "created_at" : "2020-09-25T16:15:27.590000 00:00",
         "document_type" : "service",
         "state" : "subscribed",
         "tag" : "TV47X3XQ",
         "techc_id" : "5f62071fa6dbcad5bf20d832",
         "type" : "telephony",
         "updated_at" : "2020-09-25T16:15:27.590000 00:00"
      }
   ],
   "limit" : 50,
   "offset" : 0
}
  

Этот цикл будет перебирать словари, которые присутствуют внутри списка, как показано в вопросе:

 for inner_dict in in_dict['documents']:
    print(inner_dict)*
  

ВЫВОД:

 {'adminc_id': '5d834741f1e79df70494d614', 'archived': False, 'company_code': 'AAAAAA', 'created_at': '2020-09-16T13:07:54.482000 00:00', 'customer_label': 'pomme', 'customer_ref': 'fruit', 'delivered_at': '2018-11-07T00:00:00 00:00', 'document_type': 'service', 'state': 'delivered', 'subscribed_at': '2018-11-07T00:00:00 00:00', 'tag': 'EX46V4YQ', 'techc_id': '5d834741f1e79df70494d614', 'type': 'energy', 'updated_at': '2020-09-16T13:07:54.482000 00:00'}
{'adminc_id': '5f6e162958becabad3b64047', 'archived': False, 'company_code': 'BBBBBB', 'created_at': '2020-09-25T16:18:05.807000 00:00', 'document_type': 'service', 'state': 'subscribed', 'tag': 'T94893JQ', 'techc_id': '5f6e162958becabad3b64047', 'type': 'telephony', 'updated_at': '2020-09-25T16:18:05.807000 00:00'}
{'adminc_id': '5f62071fa6dbcad5bf20d832', 'archived': False, 'company_code': 'AAAAAA', 'created_at': '2020-09-25T16:15:27.590000 00:00', 'document_type': 'service', 'state': 'subscribed', 'tag': 'TV47X3XQ', 'techc_id': '5f62071fa6dbcad5bf20d832', 'type': 'telephony', 'updated_at': '2020-09-25T16:15:27.590000 00:00'}
  

** ПРИМЕЧАНИЕ: вы можете выбрать необходимые ключи с помощью inner_dict[KEY_NAME] **