我有一个像这样的词典列表:
[{'a':'21'},{},{'b':20'},{'c':'89'},{}]
清除此列表中空字典的最有效方法是什么,最终结果为:
[{'a':'21'},{'b':'20'},{'c':'89'}]
我尝试着:
new_list_of_dictionaries = [] for dictionary in list_of_dictionaries: if dictionary: new_list_of_dictionaries.append(dictionary) return new_list_of_dictionaries
我不认为这可以用O(1)或其他东西来完成?
只需使用列表推导,并过滤布尔真值.空字典被视为false:
return [d for d in list_of_dictionaries if d]
在Python 2,你也可以使用filter()
功能,使用None
的过滤器:
return filter(None, list_of_dictionaries)
在Python 3中,它返回一个迭代器,而不是一个列表,因此你必须调用list()
它(所以return list(filter(None, ...))
),此时列表理解更具可读性.当然,如果你实际上不需要随机访问结果(所以直接索引访问result[whatever]
),那么迭代器可能仍然是一个好主意.
请注意,这已经采取O(N)的时候,你必须测试每一个字典.即使列表具有某种自动更新的映射,使您可以在O(1)时间内获取字典的索引,但从列表中删除项目需要向后移动条目.