0

我正在寻找一种从多级字典中的可变深度获取值的方法。我有一个要在多级字典中查看的键列表。这个键和值将被放入一个新的字典中。

needed_keys = ["a1", "b1", "c1", "d1", "e1"]
original_dict = {"x" : {"xa1" : 5, "xaa" : True, "xaaa" : {"xaaab1" : True, "xaaabb" : False}}, "y" : {"yz" : 6.0, "yc1" : 7.0, "yf" : {"yfd1" : "a string"}}}

final_result = {"a1" : 5, "b1" :True, "c1" : 7.0, "d1" : "a string", "e1" : None}

所以基本上是这样的:

  1. 获取要查看的键名
  2. 遍历字典,检查是否dict_key.endswith(key_name)
  3. 如果找到,则从 中分配值original_dict;设置为None否则
  4. 从 1 重复直到列表的末尾

这可以通过更少的遍历来实现original_dict吗?这是可选的,因为速度在这里不是问题。我完全迷失在这里,代码不那么混乱。

4

1 回答 1

1

这是否可以通过减少 original_dict 的遍历来实现?

您可以递归地展平字典:

def flatten(aDict, output=None):
    if output is None:
        output = {}
    for key in aDict:
        if isinstance(aDict[key], dict):
            flatten(aDict[key], output)
        output[key] = aDict[key]
    return output

现在很容易获得任何级别的密钥。

final_output = {}
flat_dict = flatten(original_dict)
for key in needed_keys:
    for k in flat_dict:
        if k.endswith(key):
            final_output[key] = flat_dict[k]
            break
    if not key in final_output:
        final_output[key] = None
于 2013-12-04T14:45:34.193 回答