我创建了包含由不同对象填充的字典的列表:变量,pandas系列甚至是pandas DataFrame。此列表基本上包含有关打开的单个事务的日志。
如果满足某些条件(datetime.now()超过transaction_close_time),我想从此列表中删除事务。我试着在循环中这样做:
for transaction in transactions:
if condition is True:
result = do_sth_with(transaction)
transactions.remove(transaction)
但由于它包含pandas对象,我臭名昭着:
File "iterator.py", line 13, in close_trades
transactions.remove(trade)
File "/.../anaconda2/lib/python2.7/site-packages/pandas/core/generic.py", line 731, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
如果我没有弄错,删除方法试图将Series相互比较并因此失败,从而导致错误。 (令人惊讶的是,虽然每次python尝试删除dict时都不会出现错误,但仅在某些情况下...)
现在我在想是否有更好的方法从列表中删除这些词典。每个字典都有它作为其中一个元素的唯一ID,但我不确定如何从该元素的列表中删除它。
答案 0 :(得分:0)
我想我已经找到了解决方案(我不知道为什么我之前没有找到该主题):
Python: remove dictionary from list
无论如何我做的是:
for transaction in transactions:
if condition is True:
result = do_sth_with(transaction)
transactions[:] = [d for d in transactions if d.get('trans_id') != transaction['trans_id']]
到目前为止效果很好,我认为比list.remove()方法更快。
希望它会对某人有所帮助。