首页 > 解决方案 > 将嵌套的键名存储在变量中

问题描述

我有一个字典foo,其中可能包含 0..x 个键,其中一些键是嵌套的。我有一个键列表,如果它们存在于 中foo,我想bar使用不同的键名将它们的值添加到不同的字典中。由于我不知道每个键是否存在于 中foo,因此我需要检查它们是否存在于 dict 中并将值赋给 in bar,就None好像它们不存在一样。例如:

foo = {"ex1": "1",
       "ex2": "2",
       "ex3": {"ex3nest": "3"},
       "ex4": "4",
       "ex5": "5"}

field_mappings = {"bar1": "ex1",
                  "bar2": "ex2",
                  "bar4": "ex4"}

bar = {}
for key, value in field_mappings.items():
    bar[key] = foo[value] if value in foo else None

bar 的值将正确地为:

{"bar1": "1", "bar2": "2", "bar4": "4"}

但是,我想添加一个bar包含嵌套ex3nest键值的键,例如:

field_mappings = {"bar1": "ex1",
                  "bar2": "ex2",
                  "bar3": key for ex3nest here,
                  "bar4": "ex4"}

我看不到任何可以分配给bar3要插入value循环中的键的值,以便为ex3nest. 有没有办法像我尝试做的那样在字符串中存储嵌套的键名,或者我的方法一开始是完全错误的?

标签: pythonpython-3.xdictionary

解决方案


嘿,如果我正确理解了这个问题,您可以使用此代码,假设您在嵌套字典中有一个键:

foo = {"ex1": "1",
   "ex2": "2",
   "ex3": {"ex3nest": "3"},
   "ex4": "4",
   "ex5": "5"}

field_mappings = {"bar1": "ex1",
                  "bar2": "ex2",
                  "bar3": "ex3",
                  "bar4": "ex4"}

bar = {}
for key, value in field_mappings.items():
    if value in foo:
        if type(foo[value])==type({}):
            bar[key] = foo[value].keys()[0]
        else:
            bar[key] = foo[value]
   else:
       bar[key] = None

在此处输入图像描述

或者如果您在嵌套字典中有多个键,则为这个:

bar = {}
for key, value in field_mappings.items():
    if value in foo:
        if type(foo[value])==type({}):
            bar[key] = ",".join(foo[value].keys())
        else:
            bar[key] = foo[value]
     else:
        bar[key] = None

在此处输入图像描述


推荐阅读