如何在列表中通过键查找字典值
我有一个这样的列表:
lst = [
{'Title1': {'Link': 'ZbELsW_tyWA', 'Episode': 'Episode Name'}},
{'Title2': {'Link': 'ZbELsW_tyWA', 'Episode': 'Episode Name2'}},
]
现在我想通过单词 Title1 来搜索这个列表。
我该如何获取某个关键字的 Link 和 Episode 的值呢?
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']
前提是你的标题是唯一的。