我从来没有想过我会遇到python的速度问题,但我有.我试图根据字典值比较真正的大字典列表.我比较两个列表,第一个像这样
biglist1=[{'transaction':'somevalue', 'id':'somevalue', 'date':'somevalue' ...}, {'transactio':'somevalue', 'id':'somevalue', 'date':'somevalue' ...}, ...]
Run Code Online (Sandbox Code Playgroud)
'somevalue'代表用户生成的字符串,int或decimal.现在,第二个列表非常相似,除了id值始终为空,因为它们尚未分配.
biglist2=[{'transaction':'somevalue', 'id':'', 'date':'somevalue' ...}, {'transactio':'somevalue', 'id':'', 'date':'somevalue' ...}, ...]
Run Code Online (Sandbox Code Playgroud)
所以我想得到一个biglist2中的字典列表,它与biglist1中的字典匹配,除了 id 之外的所有其他键.
我一直在做
for item in biglist2:
for transaction in biglist1:
if item['transaction'] == transaction['transaction']:
list_transactionnamematches.append(transaction)
for item in biglist2:
for transaction in list_transactionnamematches:
if item['date'] == transaction['date']:
list_transactionnamematches.append(transaction)
Run Code Online (Sandbox Code Playgroud)
...等等,不比较id值,直到我得到最终的匹配列表.由于列表可能非常大(每个项目大约3000个以上),因此python循环需要相当长的时间.
我猜这不应该是如何进行这种比较的.有任何想法吗?
rec*_*ive 18
要用于查找的字段的索引.O(N + M)
matches = []
biglist1_indexed = {}
for item in biglist1:
biglist1_indexed[(item["transaction"], item["date"])] = item
for item in biglist2:
if (item["transaction"], item["date"]) in biglist1_indexed:
matches.append(item)
Run Code Online (Sandbox Code Playgroud)
这可能比你现在做的快几千倍.
| 归档时间: |
|
| 查看次数: |
6837 次 |
| 最近记录: |