Синтаксический анализ нескольких общих значений в dict (имена пользователей)

#python #dictionary #parsing

#python #словарь #синтаксический анализ

Вопрос:

У меня есть dict , который извлекается из API, в котором перечислены профили как таковые:

 {
    'sections':  None,
     'global_blacklist_sample':  None,
     'users':  [
        {
            'pk':  20172538534,
             'username':  'username1',
             'full_name':  'name1',
             'is_private':  True,
             'profile_pic_url':  'https: //instagram.fsin5-1.fna.fbcdn.net/v/t51.2885-19/s150x150/73546075_539443043502574_2665415317592735744_n.jpg?_nc_ht=instagram.fsin5-1.fna.fbcdn.netamp;_nc_ohc=ZK6_BMRPA68AX8uf94Gamp;_nc_tp=25amp;oh=cdaaf6f4d67261ec05c5db86efd55b12amp;oe=5FE02ABB',
             'profile_pic_id':  '2182146027925079168_20172038574',
             'is_verified':  False,
             'has_anonymous_profile_picture':  False,
             'reel_auto_archive':  'on',
             'allowed_commenter_type':  'any',
             'account_badges':  [

            ],
             'latest_reel_media':  0,
             'story_reel_media_ids':  [

            ]
        },
         {
            'pk':  13046517457,
             'username':  'username2',
             'full_name':  'name2',
             'is_private':  True,
             'profile_pic_url':  'https: //instagram.fsin5-1.fna.fbcdn.net/v/t51.2885-19/s150x150/92018644_888563998275610_476140774514229248_n.jpg?_nc_ht=instagram.fsin5-1.fna.fbcdn.netamp;_nc_ohc=nL8P8zD9MR8AX9aoaLBamp;_nc_tp=25amp;oh=c46c751ed4e52e62775c446a3f29e5f9amp;oe=5FE0276C',
             'profile_pic_id':  '2281189669318307392_13046517447',
             'is_verified':  False,
             'has_anonymous_profile_picture':  False,
             'account_badges':  [

            ],
             'latest_reel_media':  0,
             'story_reel_media_ids':  [

            ]
        },
         {
            'pk':  8373043335,
             'username':  'username3',
             'full_name':  'name3',
             'is_private':  True,
             'profile_pic_url':  'https: //instagram.fsin5-1.fna.fbcdn.net/v/t51.2885-19/s150x150/110630893_306355594052903_5751168818852707872_n.jpg?_nc_ht=instagram.fsin5-1.fna.fbcdn.netamp;_nc_ohc=SrVfiL5_r9cAX8yTCCvamp;_nc_tp=25amp;oh=68db435ac44869d772c16aed8cbdaeb1amp;oe=5FDDE888',
             'profile_pic_id':  '2358844203752433124_8373061335',
             'is_verified':  False,
             'has_anonymous_profile_picture':  False,
             'account_badges':  [

            ],
             'latest_reel_media':  1605694021,
             'story_reel_media_ids':  [

            ]
        }
    ],
     'big_list':  False,
     'next_max_id':  None,
     'page_size':  200,
     'status':  'ok'
}
  

Я бы хотел, чтобы он выводил / печатал все имена пользователей вместе со is_private значением. Так, например: "username1:True" . На самом деле существует много профилей dict , поэтому ручное использование как таковое не сработает.

 print(dict["users"][0]["username"])
print(dict["users"][1]["username"])
print(dict["users"][2]["username"])
  

Этот фрагмент кода работает, но только если я удалю то, что находится под фрагментом кода:

 def iterateDictionary2(key_name, key_name2, some_list):
    for d in some_list:
        print(d[key_name]   ":"   str(d[key_name2]))

iterateDictionary2('username', 'is_private', fllwrs)
  
 {
        'sections':  None,
         'global_blacklist_sample':  None,
         'users':
  

и

          'big_list':  False,
         'next_max_id':  None,
         'page_size':  200,
         'status':  'ok'
    }
  

Ответ №1:

Не могли бы вы просто перебрать ключ «users» в dict? Это будет выглядеть примерно так:

 users_dict = {
    'sections':  None,
    'global_blacklist_sample':  None,
    'users':  [
             {
                 'pk':  20172538534,
                 'username':  'username1',
                 'full_name':  'name1',
                 'is_private':  True,
                 'profile_pic_url':  'https: //instagram.fsin5-1.fna.fbcdn.net/v/t51.2885-19/s150x150/73546075_539443043502574_2665415317592735744_n.jpg?_nc_ht=instagram.fsin5-1.fna.fbcdn.netamp;_nc_ohc=ZK6_BMRPA68AX8uf94Gamp;_nc_tp=25amp;oh=cdaaf6f4d67261ec05c5db86efd55b12amp;oe=5FE02ABB',
                 'profile_pic_id':  '2182146027925079168_20172038574',
                 'is_verified':  False,
                 'has_anonymous_profile_picture':  False,
                 'reel_auto_archive':  'on',
                 'allowed_commenter_type':  'any',
                 'account_badges':  [

                 ],
                 'latest_reel_media':  0,
                 'story_reel_media_ids':  [

                 ]
             },
        {
                 'pk':  13046517457,
                 'username':  'username2',
                 'full_name':  'name2',
                 'is_private':  True,
                 'profile_pic_url':  'https: //instagram.fsin5-1.fna.fbcdn.net/v/t51.2885-19/s150x150/92018644_888563998275610_476140774514229248_n.jpg?_nc_ht=instagram.fsin5-1.fna.fbcdn.netamp;_nc_ohc=nL8P8zD9MR8AX9aoaLBamp;_nc_tp=25amp;oh=c46c751ed4e52e62775c446a3f29e5f9amp;oe=5FE0276C',
                 'profile_pic_id':  '2281189669318307392_13046517447',
                 'is_verified':  False,
                 'has_anonymous_profile_picture':  False,
                 'account_badges':  [

                 ],
                 'latest_reel_media':  0,
                 'story_reel_media_ids':  [

                 ]
             },
        {
                 'pk':  8373043335,
                 'username':  'username3',
                 'full_name':  'name3',
                 'is_private':  True,
                 'profile_pic_url':  'https: //instagram.fsin5-1.fna.fbcdn.net/v/t51.2885-19/s150x150/110630893_306355594052903_5751168818852707872_n.jpg?_nc_ht=instagram.fsin5-1.fna.fbcdn.netamp;_nc_ohc=SrVfiL5_r9cAX8yTCCvamp;_nc_tp=25amp;oh=68db435ac44869d772c16aed8cbdaeb1amp;oe=5FDDE888',
                 'profile_pic_id':  '2358844203752433124_8373061335',
                 'is_verified':  False,
                 'has_anonymous_profile_picture':  False,
                 'account_badges':  [

                 ],
                 'latest_reel_media':  1605694021,
                 'story_reel_media_ids':  [

                 ]
             }
    ],
    'big_list':  False,
    'next_max_id':  None,
    'page_size':  200,
    'status':  'ok'
}
  

Я вызываю словарь users_dict вместо «dict», как у вас было в вашем примере. После создания словаря users_dict мы присваиваем переменной с именем users значения, равные значениям в ключе «users» dict. Тогда все, что нам нужно сделать, это перебрать «пользователей»

 users = users_dict["users"]
for user in users:
    print(f"{user['username']}:{user['is_private']}")
  

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

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

1. Работает безупречно, большое вам спасибо! Никогда не думал об этом, ха-ха