如何在列表中通过键查找字典值

0 投票
3 回答
1158 浏览
提问于 2025-04-18 01:27

我有一个这样的列表:

lst = [
    {'Title1': {'Link': 'ZbELsW_tyWA', 'Episode': 'Episode Name'}},
    {'Title2': {'Link': 'ZbELsW_tyWA', 'Episode': 'Episode Name2'}},
]

现在我想通过单词 Title1 来搜索这个列表。

我该如何获取某个关键字的 LinkEpisode 的值呢?

3 个回答

0

你可以使用过滤函数。这个函数的第一个参数是一个用来筛选列表的函数。在这里,我们需要的这个函数要检查字典里是否存在'Title1'。所以这个表达式就能给你想要的结果:

filter(lambda x : 'Title1' in x, lst)
0

你可以这样做

for item in lst:
    for key,value in item.iteritems():
        if key == "Title1":
            link = value["Link"]
            episode = value["Episode"]
3

使用列表推导式来找出所有匹配项:

[d[searchtitle] for d in lst if searchtitle in d]

这里的 searchtitle 包含 'Title1'。结果会是一个包含匹配字典的列表。

只找出 第一个 匹配项:

next((d[searchtitle] for d in lst if searchtitle in d), None)

如果没有找到匹配项,它会返回 None,如果找到了,就会返回一个包含匹配键的字典。

演示:

>>> lst = [
...     {'Title1': {'Link': 'ZbELsW_tyWA', 'Episode': 'Episode Name'}},
...     {'Title2': {'Link': 'ZbELsW_tyWA', 'Episode': 'Episode Name2'}},
... ]
>>> searchtitle = 'Title1'
>>> [d[searchtitle] for d in lst if searchtitle in d]
[{'Episode': 'Episode Name', 'Link': 'ZbELsW_tyWA'}]
>>> next((d[searchtitle] for d in lst if searchtitle in d), None)
{'Episode': 'Episode Name', 'Link': 'ZbELsW_tyWA'}

与其把每个标题单独存成一个字典放在列表里,不如把每个标题作为一个键存进 一个 字典,这样搜索会简单很多:

titles = {
    'Title1': {'Link': 'ZbELsW_tyWA', 'Episode': 'Episode Name'},
    'Title2': {'Link': 'ZbELsW_tyWA', 'Episode': 'Episode Name2'},
}

现在你只需要直接引用标题的键,就能获取到嵌套的字典:

titles['Title1']

前提是你的标题是唯一的。

撰写回答