使用字典列表值从列表中搜索字符串值

2024-10-08 20:15:58 发布

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

下面我有一个列表,并用下面的值记录。dict具有与列表值关联的键

我想要的是使用字典中列表的值搜索列表中的字符串,并使用每个匹配捕获相应的键值,然后使用上面列出的每个匹配的键值创建一个新列表

list = ['man', 'men', 'boy', 'buoy', 'cat','caat']
dict={'man':['man', 'men', 'mun'], 'boy':['boy','buoy','bay'], 'cat':['cat','caat','cut']}

上述情况的预期输出为: Outputlist=[“男人”,“男人”,“男孩”,“男孩”,“猫”,“猫”]

当我尝试相同的方法时,我只得到一个匹配项,如下所示

lis = ['man', 'men', 'boy', 'buoy', 'cat','caat']
dic={'man':['man', 'men', 'mun'], 'boy':['boy','buoy','bay'], 'cat':['cat','caat','cut']}
for key,value in dic.items():
    if value in lis:
        output.append(key)
print(output)

Tags: 列表dictcat键值boycutbayman
3条回答

我认为你做得不对。首先,您需要遍历lis,然后找到相应的密钥:

output = []
lis = ['man', 'men', 'boy', 'buoy', 'cat','caat']
dic={'man':['man', 'men', 'mun'], 'boy':['boy','buoy','bay'], 'cat':['cat','caat','cut']}
for l in lis:
    for key, value in dic.items():
        if l in value:
            output.append(key)
print(output)

正如其他人所提到的,您可以使用列表理解直接执行此操作:

output = [next(k for k,v in dict if l in v) for l in list]

您可以使用nested list comprehension。请注意,不应使用listdict作为变量:

x = [key for key, value in dict_.items() for x in list_ if x in value]
print(x) # ['man', 'man', 'boy', 'boy', 'cat', 'cat']

首先要注意的是,要实现相同长度的输入和输出列表,应该在列表上循环,而不是在字典上循环

ys = [k for x in xs for k, v in d.items() if x in v]

另一种方法是构造反向映射。这将使事情逐渐加快:

lookup = {x: k for k, v in d.items() for x in v}

>>> lookup
{
 'bay': 'boy',
 'boy': 'boy',
 'buoy': 'boy',
 'caat': 'cat',
 'cat': 'cat',
 'cut': 'cat',
 'man': 'man',
 'men': 'man',
 'mun': 'man',
}

然后,简单地说:

ys = [lookup[x] for x in xs]

相关问题 更多 >

    热门问题