如何访问复杂嵌套多值 python 字典中的值

How do I access values in a complex nested multi value python dictonary

{
    'ServerId': 'string',
    'User': {
        'HomeDirectory': 'string',
        'SshPublicKeys': [
            {
                'DateImported': datetime(2015, 1, 1),
                'SshPublicKeyId': '123'
            },
                        {
                'DateImported': datetime(2018, 1, 1),
                'SshPublicKeyId': '456'
            },
        ],
        'UserName': 'string'
    }
}
'SshPublicKeyId': '123' 
'SshPublicKeyId': '456'

试试这个:

res = [{'SshPublicKeyId': x['SshPublicKeyId']} for x in d['User']['SshPublicKeys']]

输出:

[{'SshPublicKeyId': '123'}, {'SshPublicKeyId': '456'}]

如果你想输出为字符串

res = ['SshPublicKeyId: ' + x['SshPublicKeyId'] for x in d['User']['SshPublicKeys']]

输出:

['SshPublicKeyId: 123', 'SshPublicKeyId: 456']
for public_key in dicta["User"]["SshPublicKeys"]:
    print(f"'SshPublicKeyId': '{public_key['SshPublicKeyId']}'")

输出:

'SshPublicKeyId': '123'
'SshPublicKeyId': '456'

可以通过链接元素访问来完成,如下所示。

假设主词典名为 d,要访问 'User' 词典,您需要执行 d['User'],即:

d['User'] = {
    'HomeDirectory': 'string',
    'SshPublicKeys': [
        {
            'DateImported': datetime(2015, 1, 1),
            'SshPublicKeyId': '123'
        },
        {
            'DateImported': datetime(2018, 1, 1),
            'SshPublicKeyId': '456'
        },
    ],
    'UserName': 'string
}

要访问 d['User']'SshPublicKeys' 列表,请执行 d['User']['SshPublicKeys'],即:

d['User']['SshPublicKeys'] = [
    {
        'DateImported': datetime(2015, 1, 1),
        'SshPublicKeyId': '123'
    },
    {
        'DateImported': datetime(2018, 1, 1),
        'SshPublicKeyId': '456'
    },
]

现在要访问 d['User']['SshPublicKeys'] 的第一本词典,您需要执行 d['User']['SshPublicKeys'][0],即:

d['User']['SshPublicKeys'][0] = {
    'DateImported': datetime(2015, 1, 1),
    'SshPublicKeyId': '123'
}

最后,正如您可能已经猜到的那样,要获得 'SshPublicKeyId' 执行 d['User']['SshPublicKeys'][0]['SshPublicKeyId'],即:

>>> d['User']['SshPublicKeys'][0]['SshPublicKeyId']
'123'

同理,d['User']['SshPublicKeys'][1]['SshPublicKeyId'] == '456'以此类推


编写函数 存储对 d['User']['SshPublicKeys'] 的引用并在需要重复执行时对其进行索引会更好(也更短)——以哪个为准满足您的需求。

列表理解对您的情况非常有用:

 [user_key['SshPublicKeyId'] 
 for user_key in main_dict['User']['SshPublicKeys']]