如何筛选字典并将值存储在列表中?

2024-09-30 03:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在字典中搜索类似的值,并将该值存储在列表中。 这是来自yaml的字典加载的一小部分:

global_var:
  rt_id: 12345
var_rtr_a:
  subnet: 10.10.1.0/28
var_rtr_b:
  subnet: 10.10.2.0/28

我用这个密码试过了

key = ['subnet']
values = list(map(mydictionray.get, keys)
# Output: [none]

我理解为什么输出是None,因为键不正确。 但是如何定义正确的键呢


Tags: keyid密码yamlmap列表字典var
3条回答

那是一份口述的口述

选择递归解决方案:

def recursive_key_search(key, lookup):
    if isinstance(lookup, dict):
        for _key in lookup.keys():
            if _key == key:
                output.append(lookup[key])
            recursive_key_search(key, lookup[_key])

样本使用:

test_dict = {
    'a': 'b',
    'c': {'d': 'e'}
}

output = []

recursive_key_search('d', test_dict)

print(output)
# >>> ['e']

数据的格式化方式是在字典中使用字典。当您查找subnet时,您只查看字典的第一层,而不是子网所属的第二层

我能想到的一种修改方法是迭代字典的外部值,然后搜索其中的子网:

def search_dict(data):
     output = []
     for k in data:
          try:
               output.append(data[k]['subnet'])
     return output

这将正确地从字典中获取每个子网,并将其输出到列表中

Output:
['10.10.1.0/28', '10.10.1.0/28']

我已将代码编辑成函数。数据就是字典

def search_dict(data):
    keys=['var_rtr_a','subnet','var_rtr_b','subnet']
    output=list(map(data.get,keys))
    print(output)
    return output

Output: [{'subnet': '10.10.1.0/28'}, None, {'subnet': '10.10.2.0/28'}, None]

但这不是我需要的,我只需要键中的值

相关问题 更多 >

    热门问题