如何 select 从有序字典中选出最好的一对?
How to select the best pair from the ordered dictionary?
我正在尝试将一个字符串映射到它最合适的匹配字符串。我有一个与每个映射相关联的置信度分数。我对映射进行了排序,以便很好地了解可以观察到 match_string 的重复映射的数量。有序字典如下:
OrderedDict([(('access', 0.9997727), 'アクセス'),
(('address', 0.44976854), 'お問い合せ先'),
(('address', 0.99939954), '会社所在地'),
(('address', 0.99950135), '勤務地'),
(('app_condition', 0.33275154), '祝'),
(('app_condition', 0.7852746), '勤務期間'),
(('app_condition', 0.8870019), '社員登用実績多数'),
(('app_condition', 0.9899178), '資格・スキル'),
(('cname', 0.9822838), '会社名'),
(('companydescr', 0.44985813), '経度'),
(('feature', 0.69835746), '待遇・福利厚生'),
(('feature', 0.8646633), 'メリット'),
(('feature', 0.9998708), '特徴'),
(('hiretype', 0.9998646), '雇用形態_職種ヒント'),
(('jd', 0.42525598), '応募方法'),
(('jd', 0.5210456), '生活スタイルに合わせて働けます'),
(('jd', 0.7155549), '応募後のプロセス'),
(('jd', 0.99901605), '仕事内容'),
(('occup', 0.6487035), '事業内容'),
(('occup', 0.91239053), '休日・休暇'),
(('occup', 0.94584364), 'トップ'),
(('occup', 0.96194524), '掲載URL'),
(('occup', 0.9865232), 'CMS分類職種'),
(('salary', 0.69874144), '緯度'),
(('salary', 0.9436217), '取得日'),
(('salary', 0.97082114), '交通費'),
(('salary', 0.9999827), '給与'),
(('title', 0.999959), 'タイトル'),
(('workhours', 0.99996305), '勤務曜日・時間'),
(('workhours', 0.9999968), '時間帯'),
(('workhours', 0.9999995), '勤務時間')])
我想 select 根据这些多个映射中的置信度分数进行最佳匹配,并创建一个新字典,例如:
{
'access':'アクセス'
'address':'勤務地'
.
.
.
'workhours':'勤務時間'
}
我怎样才能做到这一点?
有序字典的键是一个元组,值是一个字符串。
如果您的字典已经根据置信度得分排序,您可以只使用字典理解:
d = OrderedDict([(('access', 0.9997727), 'アクセス'),
(('address', 0.44976854), 'お問い合せ先'),
(('address', 0.99939954), '会社所在地'),
(('address', 0.99950135), '勤務地'),
...
])
result = {
key[0]: val for key, val in d.items()
}
print(result)
这相当于:
result = {
'access': 'アクセス',
'address': 'お問い合せ先',
'address': '会社所在地',
'address': '勤務地',
...
}
由于字典已排序,您将只保留得分最高的最后一个值。所以最后就像这样做:
result = {
'access': 'アクセス',
#'address': 'お問い合せ先',
#'address': '会社所在地',
'address': '勤務地',
...
}
它给你你想要的。
你可以试试这个:
best_vals = dict()
item_list = list()
i = 0
for key, val in ord_dict.items():
item_list.append(key[0])
if key[0] == item_list[i]:
if len(item_list) == 1:
best_vals[key[0]] = val
continue
else:
best_vals[key[0]] = val
best_vals 的输出:
{'access': 'アクセス',
'address': '勤務地',
'app_condition': '資格・スキル',
'cname': '会社名',
'companydescr': '経度',
'feature': '特徴',
'hiretype': '雇用形態_職種ヒント',
'jd': '仕事内容',
'occup': 'CMS分類職種',
'salary': '給与',
'title': 'タイトル',
'workhours': '勤務時間'}
因为你的字典是反向排序的,我做的是检查当前项目是否是你字典中的最后一个,如果是,我设置相应键的值。
from collections import OrderedDict
d = OrderedDict([(('access', 0.9997727), 'アクセス'),
(('address', 0.44976854), 'お問い合せ先'),
(('address', 0.99939954), '会社所在地'),
(('address', 0.99950135), '勤務地'),
(('app_condition', 0.33275154), '祝'),
(('app_condition', 0.7852746), '勤務期間'),
(('app_condition', 0.8870019), '社員登用実績多数'),
(('app_condition', 0.9899178), '資格・スキル'),
(('cname', 0.9822838), '会社名'),
(('companydescr', 0.44985813), '経度'),
(('feature', 0.69835746), '待遇・福利厚生'),
(('feature', 0.8646633), 'メリット'),
(('feature', 0.9998708), '特徴'),
(('hiretype', 0.9998646), '雇用形態_職種ヒント'),
(('jd', 0.42525598), '応募方法'),
(('jd', 0.5210456), '生活スタイルに合わせて働けます'),
(('jd', 0.7155549), '応募後のプロセス'),
(('jd', 0.99901605), '仕事内容'),
(('occup', 0.6487035), '事業内容'),
(('occup', 0.91239053), '休日・休暇'),
(('occup', 0.94584364), 'トップ'),
(('occup', 0.96194524), '掲載URL'),
(('occup', 0.9865232), 'CMS分類職種'),
(('salary', 0.69874144), '緯度'),
(('salary', 0.9436217), '取得日'),
(('salary', 0.97082114), '交通費'),
(('salary', 0.9999827), '給与'),
(('title', 0.999959), 'タイトル'),
(('workhours', 0.99996305), '勤務曜日・時間'),
(('workhours', 0.9999968), '時間帯'),
(('workhours', 0.9999995), '勤務時間')])
d = sorted(d.items(), key=lambda item: (item[0][0], -item[0][1]))
res = dict()
for item in d:
if item[0][0] not in res:
res[item[0][0]] = item[1]
print("\n".join(str(item) for item in res.items()))
结果是
('access', 'アクセス')
('address', '勤務地')
('app_condition', '資格・スキル')
('cname', '会社名')
('companydescr', '経度')
('feature', '特徴')
('hiretype', '雇用形態_職種ヒント')
('jd', '仕事内容')
('occup', 'CMS分類職種')
('salary', '給与')
('title', 'タイトル')
('workhours', '勤務時間')
最简单的解决方案是 -
import pandas as pd
from collections import OrderedDict
d = OrderedDict([(('access', 0.9997727), 'アクセス'),
(('address', 0.44976854), 'お問い合せ先'),
(('address', 0.99939954), '会社所在地'),
(('address', 0.99950135), '勤務地'),
(('app_condition', 0.33275154), '祝'),
(('app_condition', 0.7852746), '勤務期間'),
(('app_condition', 0.8870019), '社員登用実績多数'),
(('app_condition', 0.9899178), '資格・スキル'),
(('cname', 0.9822838), '会社名'),
(('companydescr', 0.44985813), '経度'),
(('feature', 0.69835746), '待遇・福利厚生'),
(('feature', 0.8646633), 'メリット'),
(('feature', 0.9998708), '特徴'),
(('hiretype', 0.9998646), '雇用形態_職種ヒント'),
(('jd', 0.42525598), '応募方法'),
(('jd', 0.5210456), '生活スタイルに合わせて働けます'),
(('jd', 0.7155549), '応募後のプロセス'),
(('jd', 0.99901605), '仕事内容'),
(('occup', 0.6487035), '事業内容'),
(('occup', 0.91239053), '休日・休暇'),
(('occup', 0.94584364), 'トップ'),
(('occup', 0.96194524), '掲載URL'),
(('occup', 0.9865232), 'CMS分類職種'),
(('salary', 0.69874144), '緯度'),
(('salary', 0.9436217), '取得日'),
(('salary', 0.97082114), '交通費'),
(('salary', 0.9999827), '給与'),
(('title', 0.999959), 'タイトル'),
(('workhours', 0.99996305), '勤務曜日・時間'),
(('workhours', 0.9999968), '時間帯'),
(('workhours', 0.9999995), '勤務時間')])
df = pd.concat((pd.DataFrame(d.keys()) , pd.DataFrame(d.values())), axis =1 )
df.columns = [0,1,2]
((df.groupby(0).max())[2]).to_dict()
输出-
{'access': 'アクセス',
'address': '勤務地',
'app_condition': '資格・スキル',
'cname': '会社名',
'companydescr': '経度',
'feature': '特徴',
'hiretype': '雇用形態_職種ヒント',
'jd': '生活スタイルに合わせて働けます',
'occup': '掲載URL',
'salary': '緯度',
'title': 'タイトル',
'workhours': '時間帯'}
我正在尝试将一个字符串映射到它最合适的匹配字符串。我有一个与每个映射相关联的置信度分数。我对映射进行了排序,以便很好地了解可以观察到 match_string 的重复映射的数量。有序字典如下:
OrderedDict([(('access', 0.9997727), 'アクセス'),
(('address', 0.44976854), 'お問い合せ先'),
(('address', 0.99939954), '会社所在地'),
(('address', 0.99950135), '勤務地'),
(('app_condition', 0.33275154), '祝'),
(('app_condition', 0.7852746), '勤務期間'),
(('app_condition', 0.8870019), '社員登用実績多数'),
(('app_condition', 0.9899178), '資格・スキル'),
(('cname', 0.9822838), '会社名'),
(('companydescr', 0.44985813), '経度'),
(('feature', 0.69835746), '待遇・福利厚生'),
(('feature', 0.8646633), 'メリット'),
(('feature', 0.9998708), '特徴'),
(('hiretype', 0.9998646), '雇用形態_職種ヒント'),
(('jd', 0.42525598), '応募方法'),
(('jd', 0.5210456), '生活スタイルに合わせて働けます'),
(('jd', 0.7155549), '応募後のプロセス'),
(('jd', 0.99901605), '仕事内容'),
(('occup', 0.6487035), '事業内容'),
(('occup', 0.91239053), '休日・休暇'),
(('occup', 0.94584364), 'トップ'),
(('occup', 0.96194524), '掲載URL'),
(('occup', 0.9865232), 'CMS分類職種'),
(('salary', 0.69874144), '緯度'),
(('salary', 0.9436217), '取得日'),
(('salary', 0.97082114), '交通費'),
(('salary', 0.9999827), '給与'),
(('title', 0.999959), 'タイトル'),
(('workhours', 0.99996305), '勤務曜日・時間'),
(('workhours', 0.9999968), '時間帯'),
(('workhours', 0.9999995), '勤務時間')])
我想 select 根据这些多个映射中的置信度分数进行最佳匹配,并创建一个新字典,例如:
{
'access':'アクセス'
'address':'勤務地'
.
.
.
'workhours':'勤務時間'
}
我怎样才能做到这一点? 有序字典的键是一个元组,值是一个字符串。
如果您的字典已经根据置信度得分排序,您可以只使用字典理解:
d = OrderedDict([(('access', 0.9997727), 'アクセス'),
(('address', 0.44976854), 'お問い合せ先'),
(('address', 0.99939954), '会社所在地'),
(('address', 0.99950135), '勤務地'),
...
])
result = {
key[0]: val for key, val in d.items()
}
print(result)
这相当于:
result = {
'access': 'アクセス',
'address': 'お問い合せ先',
'address': '会社所在地',
'address': '勤務地',
...
}
由于字典已排序,您将只保留得分最高的最后一个值。所以最后就像这样做:
result = {
'access': 'アクセス',
#'address': 'お問い合せ先',
#'address': '会社所在地',
'address': '勤務地',
...
}
它给你你想要的。
你可以试试这个:
best_vals = dict()
item_list = list()
i = 0
for key, val in ord_dict.items():
item_list.append(key[0])
if key[0] == item_list[i]:
if len(item_list) == 1:
best_vals[key[0]] = val
continue
else:
best_vals[key[0]] = val
best_vals 的输出:
{'access': 'アクセス',
'address': '勤務地',
'app_condition': '資格・スキル',
'cname': '会社名',
'companydescr': '経度',
'feature': '特徴',
'hiretype': '雇用形態_職種ヒント',
'jd': '仕事内容',
'occup': 'CMS分類職種',
'salary': '給与',
'title': 'タイトル',
'workhours': '勤務時間'}
因为你的字典是反向排序的,我做的是检查当前项目是否是你字典中的最后一个,如果是,我设置相应键的值。
from collections import OrderedDict
d = OrderedDict([(('access', 0.9997727), 'アクセス'),
(('address', 0.44976854), 'お問い合せ先'),
(('address', 0.99939954), '会社所在地'),
(('address', 0.99950135), '勤務地'),
(('app_condition', 0.33275154), '祝'),
(('app_condition', 0.7852746), '勤務期間'),
(('app_condition', 0.8870019), '社員登用実績多数'),
(('app_condition', 0.9899178), '資格・スキル'),
(('cname', 0.9822838), '会社名'),
(('companydescr', 0.44985813), '経度'),
(('feature', 0.69835746), '待遇・福利厚生'),
(('feature', 0.8646633), 'メリット'),
(('feature', 0.9998708), '特徴'),
(('hiretype', 0.9998646), '雇用形態_職種ヒント'),
(('jd', 0.42525598), '応募方法'),
(('jd', 0.5210456), '生活スタイルに合わせて働けます'),
(('jd', 0.7155549), '応募後のプロセス'),
(('jd', 0.99901605), '仕事内容'),
(('occup', 0.6487035), '事業内容'),
(('occup', 0.91239053), '休日・休暇'),
(('occup', 0.94584364), 'トップ'),
(('occup', 0.96194524), '掲載URL'),
(('occup', 0.9865232), 'CMS分類職種'),
(('salary', 0.69874144), '緯度'),
(('salary', 0.9436217), '取得日'),
(('salary', 0.97082114), '交通費'),
(('salary', 0.9999827), '給与'),
(('title', 0.999959), 'タイトル'),
(('workhours', 0.99996305), '勤務曜日・時間'),
(('workhours', 0.9999968), '時間帯'),
(('workhours', 0.9999995), '勤務時間')])
d = sorted(d.items(), key=lambda item: (item[0][0], -item[0][1]))
res = dict()
for item in d:
if item[0][0] not in res:
res[item[0][0]] = item[1]
print("\n".join(str(item) for item in res.items()))
结果是
('access', 'アクセス')
('address', '勤務地')
('app_condition', '資格・スキル')
('cname', '会社名')
('companydescr', '経度')
('feature', '特徴')
('hiretype', '雇用形態_職種ヒント')
('jd', '仕事内容')
('occup', 'CMS分類職種')
('salary', '給与')
('title', 'タイトル')
('workhours', '勤務時間')
最简单的解决方案是 -
import pandas as pd
from collections import OrderedDict
d = OrderedDict([(('access', 0.9997727), 'アクセス'),
(('address', 0.44976854), 'お問い合せ先'),
(('address', 0.99939954), '会社所在地'),
(('address', 0.99950135), '勤務地'),
(('app_condition', 0.33275154), '祝'),
(('app_condition', 0.7852746), '勤務期間'),
(('app_condition', 0.8870019), '社員登用実績多数'),
(('app_condition', 0.9899178), '資格・スキル'),
(('cname', 0.9822838), '会社名'),
(('companydescr', 0.44985813), '経度'),
(('feature', 0.69835746), '待遇・福利厚生'),
(('feature', 0.8646633), 'メリット'),
(('feature', 0.9998708), '特徴'),
(('hiretype', 0.9998646), '雇用形態_職種ヒント'),
(('jd', 0.42525598), '応募方法'),
(('jd', 0.5210456), '生活スタイルに合わせて働けます'),
(('jd', 0.7155549), '応募後のプロセス'),
(('jd', 0.99901605), '仕事内容'),
(('occup', 0.6487035), '事業内容'),
(('occup', 0.91239053), '休日・休暇'),
(('occup', 0.94584364), 'トップ'),
(('occup', 0.96194524), '掲載URL'),
(('occup', 0.9865232), 'CMS分類職種'),
(('salary', 0.69874144), '緯度'),
(('salary', 0.9436217), '取得日'),
(('salary', 0.97082114), '交通費'),
(('salary', 0.9999827), '給与'),
(('title', 0.999959), 'タイトル'),
(('workhours', 0.99996305), '勤務曜日・時間'),
(('workhours', 0.9999968), '時間帯'),
(('workhours', 0.9999995), '勤務時間')])
df = pd.concat((pd.DataFrame(d.keys()) , pd.DataFrame(d.values())), axis =1 )
df.columns = [0,1,2]
((df.groupby(0).max())[2]).to_dict()
输出-
{'access': 'アクセス',
'address': '勤務地',
'app_condition': '資格・スキル',
'cname': '会社名',
'companydescr': '経度',
'feature': '特徴',
'hiretype': '雇用形態_職種ヒント',
'jd': '生活スタイルに合わせて働けます',
'occup': '掲載URL',
'salary': '緯度',
'title': 'タイトル',
'workhours': '時間帯'}