【问题标题】:Turning multiple dictionary values into single output将多个字典值转换为单个输出
【发布时间】:2021-04-09 05:01:15
【问题描述】:

我看到了类似的问题/答案,但没有找到合适的示例。我有一个(列表中的)字典列表,如下所示:

list_of_dictionaries = [
    [{'key1': {'subkey1': 1.0},'key2': {'subkey2': 1.0},'key3': 'abc'},
     {'key1': {'subkey1': 1.1},'key2': {'subkey2': 1.1},'key3': 'def'},
     {'key1': {'subkey1': 1.2},'key2': {'subkey2': 1.2},'key3': 'ghi'},
     {'key5': 5.0, 'key6': 6.0}],
    [{'key1': {'subkey1': 2.0},'key2': {'subkey2': 2.0},'key3': 'abc'},
     {'key1': {'subkey1': 2.1},'key2': {'subkey2': 2.1},'key3': 'def'},
     {'key1': {'subkey1': 2.2},'key2': {'subkey2': 2.2},'key3': 'ghi'},
     {'key5': 7.0, 'key6': 8.0}]
]

具有挑战性的部分是我希望前 3 个字典中的每一个都有一个输出,这些字典与每个列表的第 4 个元素配对:

#desired output
List1 - Subkey1 value: 1.0 /// Subkey2 value: 1.0 /// Key3 value: abc /// Key5 value: 5.0 /// Key6 value: 6.0
List1 - Subkey1 value: 1.1 /// Subkey2 value: 1.1 /// Key3 value: def /// Key5 value: 5.0 /// Key6 value: 6.0
List1 - Subkey1 value: 1.2 /// Subkey2 value: 1.2 /// Key3 value: ghi /// Key5 value: 5.0 /// Key6 value: 6.0
List2 - Subkey1 value: 2.0 /// Subkey2 value: 2.0 /// Key3 value: abc /// Key5 value: 7.0 /// Key6 value: 8.0
List2 - Subkey1 value: 2.1 /// Subkey2 value: 2.1 /// Key3 value: def /// Key5 value: 7.0 /// Key6 value: 8.0
List2 - Subkey1 value: 2.2 /// Subkey2 value: 2.2 /// Key3 value: ghi /// Key5 value: 7.0 /// Key6 value: 8.0

尝试了以下很接近的方法,但我对如何仅将 key5 和 key6 值加入每个相应的打印语句感到困惑:

for list_of_metrics in list_of_dictionaries:  
    for dictionary in list_of_metrics:
        if 'key1' in dictionary:
            subkey1 = dictionary['key1']['subkey1']
            print('Key1, Subkey1 value: ' + str(subkey1))
        if 'key5' in dictionary:
            key5 = dictionary['key5']
            key6 = dictionary['key6']
            print('Key5 value: ' + str(key5) + ', Key6 value: ' + str(key6))

#output
Key1, Subkey1 value: 1.0
Key1, Subkey1 value: 1.1
Key1, Subkey1 value: 1.2
Key5 value: 5.0, Key6 value: 6.0
Key1, Subkey1 value: 2.0
Key1, Subkey1 value: 2.1
Key1, Subkey1 value: 2.2
Key5 value: 7.0, Key6 value: 8.0

【问题讨论】:

    标签: python python-3.x list dictionary


    【解决方案1】:

    最好在此处进行切片,然后单独迭代最后一个字典,因为您需要将它与内部列表的所有其他元素累加。

    for list_of_metrics in list_of_dictionaries:
        for d in list_of_metrics[:3]:
            result = ""
            for key, value in d.items():
                if isinstance(value, dict):
                    for k, v in value.items():
                        result += f"{k} : {v} " 
                else:
                    result += f"{key}: {value} "
    
            for key, value in list_of_metrics[3].items():
                    result += f"{key} : {value} "
    
            print(result)
        print()
    

    输出:

    subkey1 : 1.0 subkey2 : 1.0 key3: abc key5 : 5.0 key6 : 6.0 
    subkey1 : 1.1 subkey2 : 1.1 key3: def key5 : 5.0 key6 : 6.0 
    subkey1 : 1.2 subkey2 : 1.2 key3: ghi key5 : 5.0 key6 : 6.0 
    
    subkey1 : 2.0 subkey2 : 2.0 key3: abc key5 : 7.0 key6 : 8.0 
    subkey1 : 2.1 subkey2 : 2.1 key3: def key5 : 7.0 key6 : 8.0 
    subkey1 : 2.2 subkey2 : 2.2 key3: ghi key5 : 7.0 key6 : 8.0 
    

    【讨论】:

      【解决方案2】:

      您可以使用update function 进行切片。见下文:

      >>> for lod in list_of_lod:
      ...     for each_d in lod[:-1]:
      ...             each_d.update(lod[-1])
      ...     lod.pop()
      
      

      【讨论】:

        【解决方案3】:

        如果您不知道 key5 和 key6 的位置,但您想将它们添加到所有其他字典中,您可以执行以下操作:

        list_of_dictionaries = [
            [{'key1': {'subkey1': 1.0},'key2': {'subkey2': 1.0},'key3': 'abc'},
             {'key1': {'subkey1': 1.1},'key2': {'subkey2': 1.1},'key3': 'def'},
             {'key1': {'subkey1': 1.2},'key2': {'subkey2': 1.2},'key3': 'ghi'},
             {'key5': 5.0, 'key6': 6.0}],
            [{'key1': {'subkey1': 2.0},'key2': {'subkey2': 2.0},'key3': 'abc'},
             {'key1': {'subkey1': 2.1},'key2': {'subkey2': 2.1},'key3': 'def'},
             {'key1': {'subkey1': 2.2},'key2': {'subkey2': 2.2},'key3': 'ghi'},
             {'key5': 7.0, 'key6': 8.0}]
        ]
        
        for list_of_metrics in list_of_dictionaries:
            extra = next((d for d in list_of_metrics if 'key5' in d), None)
            print('extra', extra)
            for dictionary in list_of_metrics:
                if 'key1' in dictionary:
                    subkey1 = dictionary['key1']['subkey1']
                    print('Key1, Subkey1 value:', subkey1, 'Key5 value:', extra['key5'], 'Key6 value:', extra['key6'])
        

        你会得到类似下面的输出:

        extra {'key5': 5.0, 'key6': 6.0}
        Key1, Subkey1 value: 1.0 Key5 value: 5.0 Key6 value: 6.0
        Key1, Subkey1 value: 1.1 Key5 value: 5.0 Key6 value: 6.0
        Key1, Subkey1 value: 1.2 Key5 value: 5.0 Key6 value: 6.0
        extra {'key5': 7.0, 'key6': 8.0}
        Key1, Subkey1 value: 2.0 Key5 value: 7.0 Key6 value: 8.0
        Key1, Subkey1 value: 2.1 Key5 value: 7.0 Key6 value: 8.0
        Key1, Subkey1 value: 2.2 Key5 value: 7.0 Key6 value: 8.0
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-06
          • 1970-01-01
          • 2017-12-26
          • 1970-01-01
          相关资源
          最近更新 更多