Как извлечь значения из списка и сохранить его как словарь (пара ключ-значение)? - PullRequest
0 голосов
/ 09 июля 2020

Мне нужно извлечь 2 значения из этого списка словаря и сохранить их как пару "ключ-значение". Здесь я приложил образцы данных .. Где мне нужно извлечь «Имя» и «Сервис» из этого ввода и сохранить их как словарь. Где «Имя» - это Ключ, а соответствующая «Служба» - это его значение.

Входные данные:

response  = {
'Roles': [
    {
        'Path': '/', 
        'Name': 'Heera', 
        'Age': '25', 
        'Policy': 'Policy1', 
        'Start_Month': 'January', 
        'PolicyDocument': 
            {
                'Date': '2012-10-17', 
                'Statement': [
                    {
                        'id': '', 
                        'RoleStatus': 'New_Joinee', 
                        'RoleType': {
                                'Service': 'Service1'
                                 }, 
                        'Action': ''
                    }
                ]
            }, 
        'Duration': 3600
    }, 
    {
        'Path': '/', 
        'Name': 'Prem', 
        'Age': '40', 
        'Policy': 'Policy2', 
        'Start_Month': 'April', 
        'PolicyDocument': 
            {
                'Date': '2018-11-27', 
                'Statement': [
                    {
                        'id': '', 
                        'RoleStatus': 'Senior', 
                        'RoleType': {
                                'Service': ''
                                 }, 
                        'Action': ''
                    }
                ]
            }, 
        'Duration': 2600
    }, 
    
    ]
}

Из этого входа мне нужен вывод как тип словаря.

Формат вывода: {Имя: Сервис}

Вывод:

{ "Heera":"Service1","Prem" : " "}

Моя попытка:

Role_name =[]
response = {#INPUT WHICH I SPECIFIED ABOVE#}
roles = response['Roles']
for role in roles:
    Role_name.append(role['Name'])
print(Role_name)

Мне нужно связать имя с соответствующей службой. Любая помощь будет действительно заметна.

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 09 июля 2020

Это должно дать вам то, что вы хотите в переменной с именем role_services:

role_services = {}

for role in response['Roles']:
    for st in role['PolicyDocument']['Statement']:
        role_services[role['Name']] = st['RoleType']['Service']

Это обеспечит go выполнение всех операторов в этой структуре данных, но имейте в виду, что вы перезапишете Пары ключ-значение при просмотре ответа, если они существуют более чем в одной записи!

Ссылка на циклы for , которая может быть полезна, иллюстрирует использование операторов if внутри них который может помочь вам расширить это, чтобы проверить, существуют ли элементы уже!

Надеюсь, что это поможет

0 голосов
/ 09 июля 2020

Кажется, что ваши входные данные структурированы как-то странно, и я не уверен, что ) делают рядом с месяцами, поскольку они делают вещи недействительными, но вот рабочий сценарий, предполагающий, что вы удалили круглые скобки из своего ввода.

response = {
    'Roles': [
        {
            'Path': '/',
            'Name': 'Heera',
            'Age': '25',
            'Policy': 'Policy1',
            'Start_Month': 'January',
'PolicyDocument':
{
    'Date': '2012-10-17',
    'Statement': [
        {
            'id': '',
            'RoleStatus': 'New_Joinee',
            'RoleType': {
                'Service': 'Service1'
            },
            'Action': ''
        }
    ]
},
'Duration': 3600
},
{
    'Path': '/',
    'Name': 'Prem',
    'Age': '40',
    'Policy': 'Policy2',
    'Start_Month': 'April',
'PolicyDocument':
{
    'Date': '2018-11-27',
    'Statement': [
        {
            'id': '',
            'RoleStatus': 'Senior',
            'RoleType': {
                'Service': ''
            },
            'Action': ''
        }
    ]
},
'Duration': 2600
},

]
}

output = {}

for i in response['Roles']:
    output[i['Name']] = i['PolicyDocument']['Statement'][0]['RoleType']['Service']

print(output)

0 голосов
/ 09 июля 2020

Достаточно написать длинную строку, которая может доходить до клавиши «Сервис». И у вас синтаксическая ошибка в строке Start_Month ':' January ') и ' Start_Month ':' April ') . Одних закрытых скобок быть не может. Исправьте это и запустите следующее.

Это код:

output_dict = {}
for r in response['Roles']:
    output_dict[r["Name"]] = r['PolicyDocument']['Statement'][0]['RoleType']['Service']

print(output_dict)

Вывод:

{'Heera': 'Service1', 'Prem': ''}
0 голосов
/ 09 июля 2020

Просто нужно сделать вот так:

liste = []
for role in response['Roles']:
    liste.append(
            {
                role['Name']:role['PolicyDocument']['Statement'][0]['RoleType']['Service'],
            }
            )
print(liste)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...