我有一个这样的清单:
l = [{'username': u'bob', 'id': 2L, 'email': u'bob@me.com'}, {'username': u'jane', 'id': 3L, 'email': u'jane@me.com'}]
所以我想知道从列表中删除bob
对象的最佳方法是什么?
我知道如何使用remove()
来消除元素,但不确定消除整个对象。
答案 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'}]