返回多个值的Python查找表

2024-09-30 20:18:05 发布

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

我希望有一个查找表返回多个值。在

例如,如果用户名是“joe”,我希望返回一个对象,例如:

{'name': 'Joseph', 'gender': 'm', 'xro': 'xy'}

目前,我有一个函数,它接受输入,将其与预定义的表单之一匹配,并返回最终形式:

^{pr2}$

目前我有多个查找表来返回构造对象所需的其他值-但是有没有一种方法可以让一个查找表返回一个对象?在

因此,期望的输出是:

cannonical_name = new_names_lookup('joey')
#returns: {'name': 'Joseph', 'gender': 'm', 'xro': 'xy'}

Tags: 对象方法函数name表单newgender形式
3条回答

你有两个直接的选择。一个是标准的查找列表,如Evan的评论所示:

{'guiseppe': 'Joseph', 'joe': 'Joseph', 'joey': 'Joseph', 'joseph': 'Joseph',
 'Samuel': 'Samuel', 'sam': 'Samuel', 'samuel': 'Samuel', 'shmuel': 'Samuel'}

现在,调整它以返回完整的对象,而不是名称。由于您没有指定对象,所以我将假设一个Person类:

^{pr2}$

现在,只需将对象插入查找表:

{'guiseppe': joseph, 'joe': joseph, 'joey': joseph, 'joseph': 'Joseph',
 'Samuel': samuel, 'sam': samuel, 'samuel': samuel, 'shmuel': 'Samuel'}

另一种查找方法是从现有代码中删除额外的循环;使用in运算符:

for canon in name_forms:
    for variant in name_forms[canon]:
        if txt.lower() in variant:
            return canon

您仍然需要字符串到对象表,但现在它变短了:

{"Joseph": jospeh, "Samuel": samuel}

我不知道您希望存储多少值,但循环遍历所有内容看起来很麻烦。在

你试过用另一种方式存储数据吗?(正如其他人所说,没有看到其他答案)

也许:

name_forms = {
'joe':'Joseph',
'joseph':'Joseph',
'guiseppe':'Joseph',
'joey':'Joseph',
'sam':'Samuel',
'samuel':'Samuel',
'shmuel':'Samuel',
'kamuel':'Samuel'
}
other_format={
   'Joseph': ['joe', 'joseph', 'guiseppe', 'joey'],
    'Samuel': ['sam', 'samuel', 'shmuel', 'kamuel']
}

def names_lookup(txt):
    if txt in name_forms:
        return name_forms[txt]
     else:
        return None

如果您不希望以这种方式存储,可以通过

^{pr2}$

此外,如果您不想继续手动键入这些单词的变体,可以查看余弦相似度。在

取决于问题。 你到底想要什么?在

我只能想出这样的办法:

    def lookup(txt):
        name_forms = {
       'Joseph': ['joe', 'joseph', 'guiseppe', 'joey'], 
       'Samuel': ['sam', 'samuel', 'shmuel', 'kamuel'], 
       'Maria': ['mary', 'marie', 'miriam', 'mariana']}
        for i, canon in enumerate(name_forms):
            for variant in name_forms[canon]:
                if txt.lower() == variant.lower():
                    if i <= 1:
                        gender = 'm'
                        xro = 'xy'
                    else:
                        gender = 'f'
                        xro = 'xx'
                    return {'name': canon, 'gender': gender, 'xro': xro}

    lookup('joey')

我没有改变你的查找方法,但它绝对不像其他人提到的那样有效。在

相关问题 更多 >