【问题标题】:Iterating through list of dictionaries to extract specific key/values in python遍历字典列表以提取python中的特定键/值
【发布时间】:2018-09-07 02:46:30
【问题描述】:

我有一个字典列表:

lofd = [{'a':'123', 'b':'abc', 'c': {'ca':['1','2'],'cb':['3','4']},'d':{'da':['1','2'], 'db':['1','2']}]

我需要遍历它以将其提取到一个新的数据集中:

new_lofd = [{'a':'123', 'c':{'ca':['1','2'], 'd':{'db':['1','2']}]

如何在循环中访问特定的键/值?

【问题讨论】:

    标签: python-3.x loops dictionary nested-lists


    【解决方案1】:

    您有一个嵌套的数据结构,通常很难提取特定项目。在你的情况下:

    1. 迭代每个级别
    2. 创建白名单键的新子字典
    3. 将子字典合并在一起

    请参阅下面的注释示例。

    给定

    lofd = [
        {"a": "123", 
         "b": "abc", 
         "c": {"ca": ["1", "2"],
               "cb": ["3", "4"]},
         "d": {"da": ["1", "2"], 
               "db": ["1", "2"]}
        }
    ]
    #      ^     ^
    #      |     |___ level II   
    #      \__________level I
    

    选择每个级别所需的键:

    level_i_keys = {"a", "c", "d"}
    level_ii_keys = {"ca", "db"}
    

    代码

    res = {}
    for k, v in lofd[0].items():                                                # 1  
        if k not in level_i_keys:
            continue
        if not isinstance(v, dict):
            sub = {k: v}                                                        # 2
        else:
            sub = {k: {k2: v2 for k2, v2 in v.items() if k2 in level_ii_keys}}  # 1, 2
        res.update(sub)                                                         # 3
    
    
    new_lofd = [res]
    new_lofd
    

    输出

    [
        {"a":"123", 
         "c": {"ca":["1","2"]}, 
         "d": {"db":["1","2"]}
        }
    ]
    

    【讨论】:

      【解决方案2】:

      您可以先将 loft 列表转换成这样的字典

      lofd = [{'a':'123', 'b':'abc', 'c': {'ca':['1','2'],'cb':['3','4']},'d':{'da':['1','2'], 'db':['1','2']}}]
            dic = lofd[0]
      

      一个简单的循环将为您完成这项工作。否则,你不能直接遍历你的列表,因为它只有一个巨大的字典元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-11
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        • 2021-12-06
        • 1970-01-01
        相关资源
        最近更新 更多