如何从有序字典中选择最佳对?

2024-09-27 00:12:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将字符串映射到其最合适的匹配字符串。我有一个与每个映射相关的置信度分数。我对映射进行排序是为了更好地了解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), '勤務時間')])

我想根据这些多个映射的置信度得分选择最佳匹配,并创建一个新字典,如:

{
'access':'アクセス'
'address':'勤務地'
.
.
.
'workhours':'勤務時間'
}

我怎样才能做到这一点? 有序dict的键是元组,值是字符串


Tags: 字符串app内容accessaddressconditionfeaturejd
3条回答

如果您的词典已经根据置信度评分进行了排序,您可以使用口述理解:

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': '勤務地',
   ...
}

这给了你想要的

最简单的解决办法是——

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': '時間帯'}
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', '勤務時間')

相关问题 更多 >

    热门问题