我不熟悉與defaultdicts 合作。我有一個匹配腳本,它將唯一識別符號作為“鍵”放置,然后使用defaultdict(list). 匹配是公司名稱、地址和匹配分數(基于匹配演算法)。有時是 1-1 匹配,這意味著有 1 個鍵與匹配相關聯,但有時演算法會捕獲接近匹配,因此有時會有多個匹配。對于那些想選擇這個得分最高的比賽的人。
目標: 從 defaultdict(list) 中提取每個唯一識別符號的資料。如果唯一識別符號的值大于 1,則精確計算具有最高 Lev Score、Fuzzy Score 和 Jaro 分數的資料。
這是資料的預覽:
#imports
from collections import defaultdict
test_dic_stack = defaultdict(list)
#testing data (unique1 has a 1-1 match & unique2 has a 1-5 match)
test_dic_stack['unique1'].append({'Account Name': 'company1', 'Matching Account': 'company1', 'Account_Address': '123 Road', 'Address_match': '123 Road', 'Lev_score': 98.0, 'Fuzzy_score': 100, 'Jaro_Score': 99.0})
test_dic_stack['unique2'].append({'Account Name': 'company1', 'Matching Account': 'company1', 'Account_Address': '1 awesome street', 'Address_match': '1 awesome street', 'Lev_score': 91.0, 'Fuzzy_score': 89, 'Jaro_Score': 99.0})
test_dic_stack['unique2'].append({'Account Name': 'company2', 'Matching Account': 'company2', 'Account_Address': '1 awesome street', 'Address_match': '1 awesome st', 'Lev_score': 71.0, 'Fuzzy_score': 82, 'Jaro_Score': 84.0})
test_dic_stack['unique2'].append({'Account Name': 'company3', 'Matching Account': 'company3', 'Account_Address': '1 awesome street', 'Address_match': '1 awesome street suite 1', 'Lev_score': 88.0, 'Fuzzy_score': 89, 'Jaro_Score': 90.0})
test_dic_stack['unique2'].append({'Account Name': 'company4', 'Matching Account': 'company4', 'Account_Address': '1 awesome street', 'Address_match': '1 awe street', 'Lev_score': 81.0, 'Fuzzy_score': 90, 'Jaro_Score': 86.0})
test_dic_stack['unique2'].append({'Account Name': 'company5', 'Matching Account': 'company5', 'Account_Address': '1 awesome street', 'Address_match': '1 awe st', 'Lev_score': 70.0, 'Fuzzy_score': 86, 'Jaro_Score': 89.0})
#defaultdict preview
defaultdict(list,
{'unique1': [{'Account Name': 'company1',
'Matching Account': 'company1',
'Account_Address': '123 Road',
'Address_match': '123 Road',
'Lev_score': 98.0,
'Fuzzy_score': 100,
'Jaro_Score': 99.0}],
'unique2': [{'Account Name': 'company1',
'Matching Account': 'company1',
'Account_Address': '1 awesome street',
'Address_match': '1 awesome street',
'Lev_score': 91.0,
'Fuzzy_score': 89,
'Jaro_Score': 99.0},
{'Account Name': 'company2',
'Matching Account': 'company2',
'Account_Address': '1 awesome street',
'Address_match': '1 awesome st',
'Lev_score': 71.0,
'Fuzzy_score': 82,
'Jaro_Score': 84.0},
{'Account Name': 'company3',
'Matching Account': 'company3',
'Account_Address': '1 awesome street',
'Address_match': '1 awesome street suite 1',
'Lev_score': 88.0,
'Fuzzy_score': 89,
'Jaro_Score': 90.0},
{'Account Name': 'company4',
'Matching Account': 'company4',
'Account_Address': '1 awesome street',
'Address_match': '1 awe street',
'Lev_score': 81.0,
'Fuzzy_score': 90,
'Jaro_Score': 86.0},
{'Account Name': 'company5',
'Matching Account': 'company5',
'Account_Address': '1 awesome street',
'Address_match': '1 awe st',
'Lev_score': 70.0,
'Fuzzy_score': 86,
'Jaro_Score': 89.0}]})
這是我要求的結果:
提取 unique1 資料并提取 unique2 “最佳匹配”資料。請注意,有時最好的匹配并不總是第一個
results = [{'unique1': {'Account Name': 'company1',
'Matching Account': 'company1',
'Account_Address': '123 Road',
'Address_match': '123 Road',
'Lev_score': 98.0,
'Fuzzy_score': 100,
'Jaro_Score': 99.0},
'unique2': {'Account Name': 'company1',
'Matching Account': 'company1',
'Account_Address': '1 awesome street',
'Address_match': '1 awesome street',
'Lev_score': 91.0,
'Fuzzy_score': 89,
'Jaro_Score': 99.0}]
uj5u.com熱心網友回復:
您可以使用字典理解,max將三個分數的總和用作鍵。
假設d輸入字典。
out = {k:max(v, key=lambda x: sum((x['Fuzzy_score'], x['Lev_score'], x['Jaro_Score'])))
for k,v in d.items()}
輸出:
{'unique1': {'Account Name': 'company1',
'Matching Account': 'company1',
'Account_Address': '123 Road',
'Address_match': '123 Road',
'Lev_score': 98.0,
'Fuzzy_score': 100,
'Jaro_Score': 99.0},
'unique2': {'Account Name': 'company1',
'Matching Account': 'company1',
'Account_Address': '1 awesome street',
'Address_match': '1 awesome street',
'Lev_score': 91.0,
'Fuzzy_score': 89,
'Jaro_Score': 99.0}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/437560.html
上一篇:python:如何使用字典和for回圈來計算(專案,數量)元組串列的總成本?
下一篇:無法檢查鍵是否屬于值
