如何从python中的列表中删除对象?

时间:2015-10-09 18:18:23

标签: python list python-2.7

我有一个这样的清单:

l = [{'username': u'bob', 'id': 2L, 'email': u'bob@me.com'}, {'username': u'jane', 'id': 3L, 'email': u'jane@me.com'}]

所以我想知道从列表中删除bob对象的最佳方法是什么?

我知道如何使用remove()来消除元素,但不确定消除整个对象。

3 个答案:

答案 0 :(得分:1)

使用列表理解并过滤掉不需要的对象,例如

>>> [item for item in l if item['username'] != 'bob']
[{'email': 'jane@me.com', 'username': 'jane', 'id': 3}]

或者您也可以使用filter功能,如此

>>> filter(lambda item: item['username'] != 'bob', l)
[{'email': 'jane@me.com', 'username': 'jane', 'id': 3}]

注意:这两种方法都返回一个没有您不想要的项目的新列表。它们不会改变原始对象。

答案 1 :(得分:1)

您可以使用列表推导来遍历列表,并保留那些用户名值不是bob的词典:

>>> [_dic for _dic in l if _dic.get('username','')!='bob']
[{'username': u'jane', 'id': 3L, 'email': u'jane@me.com'}]

请注意,使用dict.get您可以为此方法设置默认值,如果您的词典没有键username,则会返回该值,因此它不会引发KeyError。< / p>

答案 2 :(得分:0)

以下内容将返回用户名不是bob的所有对象:

l2 = filter(lambda x: x['username'] != 'bob', l)

现在如果你打印l2,你会得到:

[{'email': u'jane@me.com', 'id': 3L, 'username': u'jane'}]