如何通过字典的另一个键值获取键值



我正在尝试通过英雄id为我的程序获取英雄名称。

让我们假设我有一个英雄id数组:hero_ids = [1, 15, 27, 44, 135]

和一个字典,其中包含包含英雄信息的字典列表:

{
"heroes": [
{
"name": "hero1",
"id": 1,
},
{
"name": "hero2",
"id": 2,
},
{
"name": "hero3",
"id": 3,
},

问题:如何获得每个英雄id对应的英雄名列表?

我花了3个小时在这上面,但还是不明白这个想法。我尝试过列表推导(似乎它们不能与字典一起使用),手动索引通过hero_ids数组或英雄数组,但没有运气

您可以使用列表推导-

data = {
"heroes": [
{
"name": "hero1",
"id": 1,
},
{
"name": "hero2",
"id": 2,
},
{
"name": "hero3",
"id": 3,
}]
}
hero_ids = [1, 2, 3]
hero_names = [info.get('name') for info in data['heroes'] for hero_id in hero_ids if info.get('id') == hero_id]
print(hero_names)

输出:

['hero1', 'hero2', 'hero3']

请注意,如果英雄列表非常大,那么这样做会稍微慢一些,所以最好将输入转换为字典。


更好的方法可能是创建一个key为hero_id, value为hero_name的字典-

# convert data into a dict format
hero_map = {x.get('id'): x.get('name') for x in data['heroes']}
hero_ids = [1, 2, 3]
hero_names = [hero_map[i] for i in hero_ids]
print(hero_names)

输出:

['hero1', 'hero2', 'hero3']

一个比建议的更短的方法是使用in关键字,它允许您检查一个实例是否包含在一组其他实例中。

这样可以避免嵌套循环。

data = {
"heroes": [
{"name": "hero1", "id": 1},
{"name": "hero2", "id": 2},
...
]
}
hero_ids = [1, 2, 3]
matching_names = [hero.get('name') for hero in data.get('heroes') if hero.get('id') in hero_ids]
print(matching_names)

最新更新