遍历字典列表以提取python中的特定键/值

时间:2018-09-07 02:46:30

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

我有一个词典列表:

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']}]

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

2 个答案:

答案 0 :(得分: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"]}
    }
]

答案 1 :(得分:0)

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

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

和一个简单的循环将为您完成这项工作。否则,由于列表中只有一个巨大的字典元素,因此无法直接遍历列表。