从嵌套字典中删除字典 [重复]

Posted

技术标签:

【中文标题】从嵌套字典中删除字典 [重复]【英文标题】:Removing a dictionary from a nested dictionary [duplicate] 【发布时间】:2018-04-14 08:16:16 【问题描述】:

我想从嵌套字典中删除字典,但我不知道如何操作。 来自这本词典:

dict =   
    'user': [
        
            'firstName': 'john',
            'lastName': 'doe',
            'movieList': []
        ,
        
            'firstName': 'sarah',
            'lastName': 'doe',
            'movieList': []
        ,
        
            'firstName': 'john',
            'lastName': 'smith',
            'movieList': []
        ,
        
            'firstName': 'sarah',
            'lastName': 'smith',
            'movieList': []
        
    ], 'movie': []

我要删除:


    'firstName': 'john', 
    'lastName': 'doe', 
    'movieList': []

索引为 0 我尝试使用 delete 但我收到此错误:

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

【问题讨论】:

@FELASNIPER del dict['user'][userId] ,我不知道我还能做什么 dict['user'] 返回一个 list 而不是 dictionary,这就是错误试图告诉的内容 试试del d['user'][0],其中d是你的字典。 userid的值是什么? 【参考方案1】:

首先,我不会将字典命名为“dict”,而是使用“d”或其他名称。

dict['user'].pop(0)

【讨论】:

感谢您的帮助 什么是“userId”?我复制了您提供的代码,对我来说效果很好。 我没有改变userId的数据类型 现在可以正常使用了【参考方案2】:

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

userId = int(userId)

【讨论】:

【参考方案3】:

有关del popremove Difference between del, remove and pop on lists 的更多信息,请参阅此问题

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

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() 代替,它可以从两端快速弹出: https://docs.python.org/3/library/collections.html#collections.deque

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

【讨论】:

【参考方案4】:

你可以试试这个:

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

输出:

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

【讨论】:

以上是关于从嵌套字典中删除字典 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用linq从字典中获取嵌套键值对[重复]

从嵌套字典创建一个 Tall 格式的数据框 [重复]

如何使用 SwiftyJSON 从深度嵌套的 JSON 字典中获取字符串 [重复]

从 JSON 反序列化重复字典

如何在带有嵌套字典的嵌套循环中正确使用字典“.update”函数[重复]

如何从字典中的列表中删除元素[重复]