繁体   English   中英

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

[英]Search for value in list in python dictionary

我希望能够获得给定昵称的人的名字(所有昵称都是唯一的)。 一个人可以有多个昵称。 我正在考虑使用如下字典

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

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

您的字典是错误的方法。 如果昵称是唯一的,请使用它们作为密钥。

>>> 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

这应该可以解决问题,而无需先转换字典。 再一次,如果搜索要进行一次以上,则在任何搜索发生之前对字典进行一次转换将使后续搜索更快,尽管这仅在昵称唯一的情况下适用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM