首页 > 解决方案 > 从嵌套字典列表中提取特定字典到临时列表

问题描述

我一直在努力从字典列表中提取值为“0”的子字典并将它们添加到临时字典中。

我试过这个:

new_users = [{'user1':{'book1':'0', 'book2':'4', 'book3':'1'}},{'user2':{'book1':'5', 'book2':'1', 'book3':'0'}}]
    def approachA():
        for data in new_users:          # new_users is a list of nested dictionaries
            if data == '0':
                 print("found 0")
                 keys = data.keys()
                 for key in keys:
                     if key == '0':
                        key.pop() # tried to deleted delete the elements at first

由于某种原因它不起作用,我已经尝试了 2 个小时,所以请不要问与问题无关的问题。

这是我正在尝试做的一个简单版本:

[{'user1':{'book1':'0', 'book2':'4', 'book3':'1'}},{'user2':{'book1':'5', 'book2':'1', 'book3':'0'}}] -> [{'user1':{'book1':'0'}}, {'user2':{'book3':'0'}}]

所以基本上值为“0”的键被复制到字典的临时列表中。

标签: pythonpython-3.xdictionary

解决方案


如果您对递归感兴趣,下面的示例应该可以帮助您:

# d_xy => x = nest level
#         y = dictionary item in nest level x

d = {'d_00' : {'d_10' : {'d_20' : 0,
                         'd_21' : 43,
                         'd_22' : 12},
               'd_11' : 4,
               'd_12' : 0,
               'd_13' : 1},
     'd_01' : 0,
     'd_02' : {'d_14' : {'d_23' : 0,
                         'd_24' : 1,
                         'd_25' : 0},
               'd_15' : 4,
               'd_16' : {'d_26' : 0,
                         'd_27' : {'d_30' : 3,
                                   'd_31' : 0,
                                   'd_32' : {'d_40' : 0},
                                   'd_33' : 0},
                         'd_28' : 1},
               'd_17' : 0}}

important_items = []

def get_0_key_values(dic):

    for key in dic:
        if type(dic[key]) == dict:
            get_0_key_values(dic[key])
        else:
            if dic[key] == 0:
                important_items.append({key : dic[key]})

get_0_key_values(d)

print(important_items)

推荐阅读