【问题标题】:Merging n'th level multidimensional dictionary合并第 n 级多维字典
【发布时间】:2018-10-07 18:41:31
【问题描述】:

好吧,我有的是:

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

这似乎是合乎逻辑的解决方案,但显然是不行的,如果可能的话,您能否建议一个使用列表理解的解决方案,或者其他一些衬里,或者如果这不可能,我会得到这个错误的原因好知识。

谢谢,

【问题讨论】:

    标签: python python-3.x dictionary list-comprehension python-3.6


    【解决方案1】:

    您可以使用字典理解:

    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.

    【讨论】:

    • 非常感谢,有道理,有点令人难以置信,但对我有用! :)
    • 有趣的是我写的循环看起来和你在回答之前解开这个时完全一样,但如果不是为了这! :) @jpp
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多