在python字典中搜索列表中的值

2024-03-29 08:53:07 发布

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

我想能够得到一个人的名字给一个昵称(所有的昵称是唯一的)。一个人可以有多个昵称。我在考虑用下面的字典

nicknames = {
    'lebron james': ['king james', 'lbj'],
    'dwayne johnson': ['rocky', 'the rock', 'brahma bull']
}

例如,给定一个字符串'rocky',我希望能够返回'dwayne johnson'。这种数据结构是存储name=>;昵称配对的最佳方式吗?还是有更好的方法来存储数据以提高搜索效率?你知道吗


Tags: the字典名字rock昵称rockyjohnsonjames
2条回答

你的字典错了。如果昵称是唯一的,请将其用作密钥。你知道吗

>>> nicknames = {
...:    'lebron james': ['king james', 'lbj'],
...:    'dwayne johnson': ['rocky', 'the rock', 'brahma bull']
...:}
>>> 
>>> nicknames = {nick:real for real, lst in nicknames.items() for nick in lst}
>>> nicknames
{'brahma bull': 'dwayne johnson',
 'king james': 'lebron james',
 'lbj': 'lebron james',
 'rocky': 'dwayne johnson',
 'the rock': 'dwayne johnson'}
>>> 
>>> nicknames['rocky']
'dwayne johnson'

我认为答案形式@timgeb是正确的。但是,如果转换字典不是一个选项,那么您可以始终搜索它,我认为这与首先转换字典具有相同的性能含义:

nicknames_by_name = {...}
def find_name(nickname_to_find);
    for name, nicknames in nicknames_by_name.items():
        for nickname in nicknames:
            if nickname == nickname_to_find:
                return name

不用先转换字典就可以了。再说一次,如果搜索不止一次,那么在任何搜索之前转换一次字典将使后续搜索更快,尽管这只适用于昵称唯一的情况。你知道吗

相关问题 更多 >