Get a list of all keys in nested dictionary

前端 未结 3 884
遇见更好的自我
遇见更好的自我 2021-01-15 12:13

I want to get a list of all keys in a nested dictionary that contains lists and dictionaries.

I currently have this code, but it seems to be missing adding some keys

3条回答
  •  长情又很酷
    2021-01-15 12:54

    As it stands, your code ignores keys that lead to list or dict values. Remove the else block in your first for loop, you want to add the key no matter what the value is.

    keys_list = []
    def get_keys(d_or_l, keys_list):
        if isinstance(d_or_l, dict):
            for k, v in iter(sorted(d_or_l.iteritems())):
                if isinstance(v, list):
                    get_keys(v, keys_list)
                elif isinstance(v, dict):
                    get_keys(v, keys_list)
                keys_list.append(k)   #  Altered line
        elif isinstance(d_or_l, list):
            for i in d_or_l:
                if isinstance(i, list):
                    get_keys(i, keys_list)
                elif isinstance(i, dict):
                    get_keys(i, keys_list)
        else:
            print "** Skipping item of type: {}".format(type(d_or_l))
        return keys_list
    

    get_keys({1: 2, 3: 4, 5: [{7: {9: 1}}]}, keys_list) returns [1, 3, 9, 7, 5]

    To avoid duplication, you could use a set datatype instead of a list.

提交回复
热议问题