从嵌套词典列表中提取特定词典到临时列表

时间:2020-05-29 17:52:01

标签: python python-3.x dictionary

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

我尝试过:

DEPENDS + = "qtbase qtxyz ..."

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

这是我要执行的操作的简单版本:

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

因此,基本上将值“ 0”的键复制到字典的临时列表中。

3 个答案:

答案 0 :(得分:0)

正如我在评论中提到的那样,我不确定这是否可以解决您的问题,但是根据您提供的示例转换,这是实现此目标的一种方法:

LIST_IN = [{"name": {"book1": "0", "book2": "1", "book3": "0"}}]

def proccess(list_in):
    result = []

    for this_dict in list_in:
        for key in this_dict["name"]:
            if this_dict["name"][key] == "0":
                result.append({key: this_dict["name"][key]})

    return result

print(proccess(LIST_IN))

答案 1 :(得分:0)

这应该完成“示例”代码段。如果这不是您要尝试的,请提供一些其他详细信息。

def solve_nested(nested_dict: list) -> list:
    result = list()
    for dictionary in nested_dict:
        for k, v in dictionary.items():
            for _k, _v in v.items():
                if _v == '0':
                    result.append({_k: _v})
    return result


if __name__ == '__main__':
    print(solve_nested([{"name": {"book1": "0", "book2": "1", "book3": "0"}}]))

答案 2 :(得分:0)

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

# 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)