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



我有以下字典:-

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())

以上解决方案将为您提供ab:

>>> a
'10.250.10.10'
>>> b
'10.250.10.20'

从Python 3.7+开始,字典保持了插入的顺序,因此可以预测ab的值。对于旧版本的Python,顺序是任意的,因此无法预测ab的值。


如果您使用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',保留ab的值,根据你想要的行为。例如:

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

这样,无论您开始使用的字典结构如何,在每个变量abc中仍然会有一些值。注意,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

相关内容

  • 没有找到相关文章

最新更新