如何从dicts元组中删除dict项?

时间:2016-03-07 15:26:00

标签: python list dictionary tuples

我有一个形式的元组:

{{theme.name}}

如何在for循环中删除dict?我尝试了以下但最后mylist = ({'a': 'a0', 't': 't0'}, {'a': 'a1', 't': 't1'}, {'a': 'a2', 't': 't2'}, ...) 仍然在元组中:

doc

2 个答案:

答案 0 :(得分:5)

首先,不要使用名称list,您将隐藏内置列表。

元组是不可变的,所以你必须构建一个新的元组。

>>> t = ({'a': 'a0',  't': 't0'}, {'a': 'a1',  't': 't1'}, {'a': 'a2',  't': 't2'})
>>> tuple(d for d in t if d['a'] != 'a0')
({'a': 'a1', 't': 't1'}, {'a': 'a2', 't': 't2'})

这假设您的所有词典实际上都有密钥'a'。如果不是这种情况,请随意添加一些错误检查代码或使用字典的get方法和生成器表达式中的回退值。

答案 1 :(得分:2)

首先;您已定义Tuple,而不是List。两者之间的主要区别在于元组是immutable。这意味着如果您想修改集合,则需要使用List:

my_list = [{'a': 'a0',  't': 't0'}, {'a': 'a1',  't': 't1'}, {'a': 'a2',  't': 't2'}]

注意使用方括号,而不是圆形。

有了这些知识,你可以选择:

构建另一个元组,省略您要删除的值:

my_tuple = ({'a': 'a0',  't': 't0'}, {'a': 'a1',  't': 't1'}, {'a': 'a2',  't': 't2'})
my_new_tuple = tuple(item for item in my_tuple if item['a'] != 'a0') 

或者,使用列表,并删除您不想要的值:

my_list = [{'a': 'a0',  't': 't0'}, {'a': 'a1',  't': 't1'}, {'a': 'a2',  't': 't2'}]  
for item in my_list:
    if item['a'] == 'a0':
        my_list.remove(item)