关于python:从嵌套字典中删除字典

Removing a dictionary from a nested dictionary

本问题已经有最佳答案,请猛点这里访问。

我想从嵌套字典中删除一个字典,我不知道怎么做。从本词典:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
dict = {  
    'user': [
        {
            'firstName': 'john',
            'lastName': 'doe',
            'movieList': []
        },
        {
            'firstName': 'sarah',
            'lastName': 'doe',
            'movieList': []
        },
        {
            'firstName': 'john',
            'lastName': 'smith',
            'movieList': []
        },
        {
            'firstName': 'sarah',
            'lastName': 'smith',
            'movieList': []
        }
    ], 'movie': []
}

我要删除:

1
2
3
4
5
{
    'firstName': 'john',
    'lastName': 'doe',
    'movieList': []
}

索引为0的我尝试使用"删除",但得到以下错误:

1
dict['user'][userId] TypeError: list indices must be integers or slices, not str


首先,我不会把听写命名为"dict",用"d"或其他什么词。

1
dict['user'].pop(0)


您可以尝试以下操作:

1
2
dict1 = {'user': [{'firstName': 'john', 'lastName': 'doe', 'movieList': []}, {'firstName': 'sarah', 'lastName': 'doe', 'movieList': []}, {'firstName': 'john', 'lastName': 'smith', 'movieList': []}, {'firstName': 'sarah', 'lastName': 'smith', 'movieList': []}], 'movie': []}
new_dict = {a:b[1:] if b else b for a, b in dict1.items()}

输出:

1
{'movie': [], 'user': [{'lastName': 'doe', 'movieList': [], 'firstName': 'sarah'}, {'lastName': 'smith', 'movieList': [], 'firstName': 'john'}, {'lastName': 'smith', 'movieList': [], 'firstName': 'sarah'}]}


有关delpopremove在del、remove和pop列表之间的差异的更多信息,请参阅此问题。

如果您不想使用要删除的词典,我将使用del,如下所示:

1
2
3
4
5
6
d = {'user': [{'firstName': 'john', 'lastName': 'doe', 'movieList': []},
              {'firstName': 'sarah', 'lastName': 'doe', 'movieList': []},
              {'firstName': 'john', 'lastName': 'smith', 'movieList': []},
              {'firstName': 'sarah', 'lastName': 'smith', 'movieList': []}], 'movie': []}

del d['user'][0]

[0]正在删除存储为'user'键值的list的第一个索引。

如果您重复删除列表的第一个索引,并且列表很长,请考虑使用deque(),它的两端都有快速的pop:https://docs.python.org/3/library/collections.html collections.deque

另外,不要将变量称为与它们类型相同的名称,也就是不要将字典变量dict称为


我会写评论,但我的名声太低了。看起来变量userid可能是字符串而不是整数。如果是这种情况,请尝试将userid转换为int:

1
userId = int(userId)