在嵌套字典中查找与某个值匹配的所有键,并创建一个以值作为键的新字典

我有以下字典(显然更大):

{
'file1': {'parameter1': value,
          'parameter2': value}

'file2': {'parameter1': value,
          'parameter2': value}                          
}

我需要把它变成:

{
'parameter1': {value1 : [list of all matching files], 
               value2 : [list of all matching files]}

'paramemer2': {value1 : [list of all matching files],
               value2 : [list of all matching files]}
}

文件和值的数量是任意的,参数的数量是固定的并且相对较低。

我有能力做到这一点,但它需要很多中间步骤,生成所有参数值的集合等。是否有快速的pythonic方式将其反转?也许我应该使用其他数据结构?

评论
  • qnobis
    qnobis 回复

    You can use a collections.defaultdict:

    from collections import defaultdict
    
    data = {
        'file1': {'parameter1': 'value1',
                  'parameter2': 'value2'},
        'file2': {'parameter1': 'value1',
                  'parameter2': 'value3'}                          
    }
    
    dd = defaultdict(lambda: defaultdict(list))
    for file, pv_dict in data.items():
        for para, value in pv_dict.items():
            dd[para][value].append(file)
    
    print(dd)
    # defaultdict(<function <lambda> at 0x7fb4d89c3c80>, 
    #     {
    #         'parameter1': defaultdict(<class 'list'>, {'value1': ['file1', 'file2']}), 
    #         'parameter2': defaultdict(<class 'list'>, {'value2': ['file1'],
    #                                                    'value3': ['file2']}), 
    #     }
    # )