如何访问复杂嵌套多值 python 字典中的值
How do I access values in a complex nested multi value python dictonary
- 我下面有一个字典格式。它是一行,但我在这里格式化了它。请注意嵌套的 Key "SshPublicKeys",它本身在方括号中有一个嵌套的键值组。
{
'ServerId': 'string',
'User': {
'HomeDirectory': 'string',
'SshPublicKeys': [
{
'DateImported': datetime(2015, 1, 1),
'SshPublicKeyId': '123'
},
{
'DateImported': datetime(2018, 1, 1),
'SshPublicKeyId': '456'
},
],
'UserName': 'string'
}
}
- 在这种格式下,如何访问所有 "SshPublicKeyId" 键值对?最终输出应如下所示或接近于此。
'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']]
- 我下面有一个字典格式。它是一行,但我在这里格式化了它。请注意嵌套的 Key "SshPublicKeys",它本身在方括号中有一个嵌套的键值组。
{
'ServerId': 'string',
'User': {
'HomeDirectory': 'string',
'SshPublicKeys': [
{
'DateImported': datetime(2015, 1, 1),
'SshPublicKeyId': '123'
},
{
'DateImported': datetime(2018, 1, 1),
'SshPublicKeyId': '456'
},
],
'UserName': 'string'
}
}
- 在这种格式下,如何访问所有 "SshPublicKeyId" 键值对?最终输出应如下所示或接近于此。
'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']]