例如,我需要查找冲销交易(行1和3以及行2和4包含冲销交易)
m_data =
{"account": "z*", 'amount': 200, "day": 3, "month": "June",
"account" : "y*", "amount": -100, "day": 9, 'month': 'May',
"account": "z*", 'amount': -200, 'day': 21, 'month': 'June'
"account" : "y", "amount" : 150, "day" : 10 month" : "May"
"account" : "x*", "amount" : 30, "day" : 16 "month": "August"
"account", "x*", 'amount': 100, "day": 5, "month": "June"}
但是我不明白用哪种方法来比较特定键和特定值?
我该用什么方法来计算呢?Shpudl我总结一下:z,数量:200和帐户:z,数量:-200?,然后对“行”2和4执行相同的操作
1条答案
按热度按时间wb1gzix01#
你在这里发布的内容并不是有效的Python,因为你只创建了一个
dict
,但是你多次赋值给同一个键。我认为你试图做的事情更像这样:如果您在此结构中有数据,并且希望通过
account
和amount
字段进行关联,则有两个基本选项。执行此操作的简单但缓慢的方法是简单的线性搜索,在该方法中,您扫描每个事务的整个列表:这是一个二次时间算法,或者说是O(n^2),如果你熟悉这种表示法的话,这意味着当列表中的项目数量变大时,它确实会变得非常慢。为了做得更好,你需要把它们转换成一个按账户和金额索引的
dict
。您可以使用
for
循环来完成此操作:或者更像Python,你可以使用字典理解:
这是一个线性的(O(n))运算,而且查找反向事务的速度会快很多:
最后要注意的是,这样做的一个结果是每个反向事务将被发现两次--一次是第一个事务,另一次是在循环到达第二个事务时(因为它们都是彼此的反向事务)。
一个简单的补救方法是,一旦找到当前事务,就从字典中删除它,假设您不需要重用它,如下面更新的代码所示(代码删除了两者,因为不再需要它们,如果事务数量非常大,较小的
dict
将稍微加快循环的其余部分)。如果确实需要重用它,可以使用
set()
来跟踪哪些事务已经匹配,并跳过它们而不改变tx_table
。希望能帮上忙。