我有以下字典:-
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())
这是一个函数式方法使用map()
实现此和operator.itemgetter()
为:
from operator import itemgetter
a, b = map(itemgetter('ip'), my_dict.values())
以上解决方案将为您提供a
和b
:
>>> a
'10.250.10.10'
>>> b
'10.250.10.20'
从Python 3.7+开始,字典保持了插入的顺序,因此可以预测a
和b
的值。对于旧版本的Python,顺序是任意的,因此无法预测a
和b
的值。
如果您使用Python 3.6或更低版本,并且顺序对您很重要,您可以使用sorted()
对字典键进行排序,并根据键的排序顺序获得值,如下所示:
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}]
现在你可以使用sort_dict_values
(而不是my_dict.values()
)执行早期的操作来获取'ip'
,保留a
和b
的值,根据你想要的行为。例如:
a, b = map(itemgetter('ip'), sort_dict_values)
# ^ instead of `my_dict.values()`
首先,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
值,传递'not found'
作为默认值ip
。
a
、b
和c
中仍然会有一些值。注意,c
的值将是'not found'
,因为子字典m3
不存在。
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={'m1': {'ip': '10.250.10.10', 'port': 6697}, 'm2': {'ip': '10.250.10.20', 'port': 6699}}
a = dict["m1"]["ip"]
b = dict["m2"]["ip"]
print(a, b)
输出:
10.250.10.10 10.250.10.20