Python 从嵌套字典中获取特定键的值,并将值存储在单独的变量中

Python 从嵌套字典中获取特定键的值,并将值存储在单独的变量中,python,dictionary,Python,Dictionary,我有以下字典:- dict={'m1': {'ip': '10.250.10.10', 'port': 6697}, 'm2': {'ip': '10.250.10.20', 'port': 6699}} 我需要在变量中存储ip值,即 a=10.250.10.10 b=10.250.10.20 有人能告诉我如何实现这一点吗?您可以创建一个生成器表达式来获取“ip”,将其解压缩并将值存储到各个变量中,如: my_dict = {'m1': {'ip': '10.250.10.10', '

我有以下字典:-

    dict={'m1': {'ip': '10.250.10.10', 'port': 6697}, 'm2': {'ip': '10.250.10.20', 'port': 6699}}
我需要在变量中存储ip值,即

a=10.250.10.10

b=10.250.10.20

有人能告诉我如何实现这一点吗?

您可以创建一个生成器表达式来获取
“ip”
,将其解压缩并将值存储到各个变量中,如:

my_dict = {'m1': {'ip': '10.250.10.10', 'port': 6697}, 'm2': {'ip': '10.250.10.20', 'port': 6699}}

a, b = (v['ip'] for v in my_dict.values())
以下是一种功能性方法,使用和as实现这一点:

上述解决方案将为您提供
a
b
如下:

>>> a
'10.250.10.10'
>>> b
'10.250.10.20'
在Python3.7+中,字典保持插入顺序,因此可以预测
a
b
的值。对于较早版本的Python,顺序是任意的,因此不能预测
a
b
的值


如果您使用的是Python版本3.6或更低版本,并且顺序对您很重要,则可以使用对字典键进行排序,并根据键的排序顺序获取值,如下所示:

sort_dict_values = [my_dict[key] for key in sorted(my_dict)]
# where `sort_dict_values` holds:
#     [{'ip': '10.250.10.10', 'port': 6697}, {'ip': '10.250.10.20', 'port': 6699}]
现在,您可以使用
排序dict\u值
(而不是
我的dict.values()
)来执行早期操作,以获取
的“ip”
,根据您所需的行为保留
a
b
的值。例如:

a, b = map(itemgetter('ip'), sort_dict_values)
                            # ^ instead of `my_dict.values()`
输出:

10.250.10.10 10.250.10.20
dict={'m1':{'ip':'10.250.10.10','port':6697},
'm2':{'ip':'10.250.10.20','port':6699}
a=dict['m1']['ip']
b=dict['m2']['ip']

首先,
dict
是Python中的内置函数,因此我避免将其用作变量名

要从字典中获取特定值,您可以使用
get
函数,该函数允许您在未定义所需密钥的情况下提供默认值。这可以防止在使用方括号访问字典元素时可能引发的
KeyError

d = {'m1': {'ip': '10.250.10.10', 'port': 6697}, 'm2': {'ip': '10.250.10.20', 'port': 6699}}

a = d.get('m1', {}).get('ip', 'not found')
b = d.get('m2', {}).get('ip', 'not found')
c = d.get('m3', {}).get('ip', 'not found')
print(a)
print(b)
print(c)
此代码获取
m1
子字典,将空字典作为默认值传递,然后从该字典中获取
ip
值,将
'notfound'
作为默认值
ip


这样,无论字典的结构如何,每个变量
a
b
c
,都会有一些值。请注意,
c
的值将是
'notfound'
,因为子字典
m3
不存在。

dict
是内置的,请注意名称阴影
10.250.10.10 10.250.10.20
d = {'m1': {'ip': '10.250.10.10', 'port': 6697}, 'm2': {'ip': '10.250.10.20', 'port': 6699}}

a = d.get('m1', {}).get('ip', 'not found')
b = d.get('m2', {}).get('ip', 'not found')
c = d.get('m3', {}).get('ip', 'not found')
print(a)
print(b)
print(c)