Получить все необработанные данные; ключи, значения в { }, связанные со значением

#python #python-3.x

#python #python-3.x

Вопрос:

У меня есть ответ со многими «элементами» в «содержимом», выглядящими следующим образом.

Для примера я сократил его до 3 «элементов» с каждым из 3 элементов:

 {

  "code": 0,

  "data": {

    "content": [

      {

        "userid": 1,

        "username": "user1",

        "city": "city1", 

      },

      {

        "userid": 2,

        "username": "user2",

        "city": "city2", 

      },
     {

        "userid": 3,

        "username": "user3",

        "city": "city3", 

      }

    ],

    "number": 0,

    "size": 0,

    "totalElements": 3

  },

  "message": "SUCCESS",

  "serverTime": 1611071504886,

  "success": true

}
 

Как мне искать, например

если идентификатор пользователя == 2

затем получить / распечатать все необработанные данные; ключи, значения в { }, связанные с идентификатором пользователя

Ответ №1:

Если ваш ответ такой, как вы показываете, то одним из возможных, но немного грязных, решений может быть:

 x = {
  "code": 0,
  "data": {
    "content": [
      {
        "userid": 1,
        "username": "user1",
        "city": "city1", 
      },
      {
        "userid": 2,
        "username": "user2",
        "city": "city2", 
      },
     {
        "userid": 3,
        "username": "user3",
        "city": "city3", 
      }
    ],
    "number": 0,
    "size": 0,
    "totalElements": 3
  },
  "message": "SUCCESS",
  "serverTime": 1611071504886,
  "success": True
}

for i in range(len(x['data']['content'])):
    if (x['data']['content'][i]).get('userid') == 2:
        print(x['data']['content'][i])
 

print(x['data']['content'][i]) дает:

 {'userid': 2, 'username': 'user2', 'city': 'city2'}
 

Другое альтернативное решение, аналогичное приведенному выше, но немного более аккуратное — извлечь список и затем перебрать его:

 a = x['data']['content'] # <-- gets the list and assigns it to variable a

for i in range(len(a)):
    if (a[i]).get('userid') == 2:
        print(a[i])
 

Ответ №2:

Сначала вам нужно будет перебрать dicts внутри и содержимое, затем вы можете использовать if его для фильтрации:

 for x in output['content']:
   if x.get('userid',None) == 2:
      print(x)
 

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

1. Лучшим ответом было бы использование метода get, поскольку метод get не вызывает a KeyError , если нет ключа.