代码之家  ›  专栏  ›  技术社区  ›  Dusan Gligoric

合并第n级多维字典

  •  1
  • Dusan Gligoric  · 技术社区  · 6 年前

    好的,那么我得到的是:

    foo = {1: {'f1': 'c1'}, 2: {'f2': 'c2'}}
    

    我想通过列表理解(当然,如果可能的话)得到的是合并所有第二级字典值:

    bar = {'f1': 'c1', 'f2': 'c2'}
    

    我尝试的是:

    bar = {k:v for k, v in tmp.items() for tmp in list(foo.values())}
    

    现在我明白了:

    NameError: name 'tmp' is not defined
    

    这就像是逻辑解决方案,但显然是不可行的,如果可能的话,请您建议一个使用列表理解的解决方案,或者其他一些一行代码的解决方案,或者如果不可能的话,了解我为什么会出现这个错误将是很好的知识。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   jpp    6 年前

    您可以使用字典理解:

    foo = {1: {'f1': 'c1'}, 2: {'f2': 'c2'}}
    
    bar = {k: v for d in foo.values() for k, v in d.items()}
    
    {'f1': 'c1', 'f2': 'c2'}
    

    您很接近,但嵌套的顺序不正确。这是一个棘手的问题,并非每个人都能凭直觉做到。阅读你的理解 就像你写一个普通的 for

    也没有必要 list 超出字典值。

    相关: Understanding nested list comprehension