Я работаю над реализацией Python AWS Cognito с помощью boto3. jwt.decode
на IdToken дает полезную нагрузку, которая находится в форме словаря, например, так:Объединить только значения списка словарей python в один словарь
{
"sub": "a uuid",
"email_verified": True,
"iss": "https://cognito-idp....",
"phone_number_verified": False,
"cognito:username": "19407ea0-a79d-11e6-9ce4-09487ca06884",
"given_name": "Aron Filbert",
"aud": "my client app",
"token_use": "id",
"auth_time": 1480547504,
"nickname": "Aron Filbert",
"phone_number": "+14025555555",
"exp": 1480551104,
"iat": 1480547504,
"email": "[email protected]"
}
Так я разработал класс User, потребляющий, что словарь. Отлично работает, пока мне не понадобится снова нажать Cognito и получить новые сведения о пользователе, чтобы убедиться, что ничего не изменилось (скажем, с другого устройства). Мое возвращение полезной нагрузки от get_user()
вызова заканчивает тем, как список словарей:
[
{
"Name": "sub",
"Value": "a uuid"
},
{
"Name": "email_verified",
"Value": "true"
},
{
"Name": "phone_number_verified",
"Value": "false"
},
{
"Name": "phone_number",
"Value": "+114025555555"
},
{
"Name": "given_name",
"Value": "Aron Filbert"
},
{
"Name": "email",
"Value": "[email protected]"
}
]
Так как я мог быть удар, что get_user()
Cognito конечной точки много, я искал эффективный способ, чтобы захватить только значения каждого словарь в списке и использовать их для формирования ключей: значения нового словаря. Пример:
{
"sub": "a uuid", # From first list item
"email_verified": True, # From next list item
...
}
Будучи новым для Python, я изо всех сил стараюсь сделать это элегантно и эффективно.
Сначала вы должны делать это просто и неэффективно, а затем беспокоиться об улучшениях (так вы учитесь). Вы пробовали что-то прямое/грубое? –
Полностью согласен. Причина, по которой я спрашиваю, заключается в том, что я нахожусь в крайнем случае, используя задний конец, с которым я не знаком. Я написал быстрый итератор для выполнения моей задачи и рассмотрел использование 'any()', а также надеялся на более питоновское решение – afilbert
'{k [" Name "]: k [" Value "] для k in list_of_dicts_from_get_user} '? –