首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过dict的另一个键值来获得键值

如何通过dict的另一个键值来获得键值
EN

Stack Overflow用户
提问于 2022-11-15 14:39:51
回答 2查看 29关注 0票数 0

我正努力为我的节目取英雄的名字。

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

还有一个有英雄信息列表的白痴:

代码语言:javascript
复制
{
    "heroes": [
        {
            "name": "hero1",
            "id": 1,
        },
        {
            "name": "hero2",
            "id": 2,
        },
        {
            "name": "hero3",
            "id": 3,
        },

问:我如何获得每一个英雄身份的英雄名字列表?

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

EN

回答 2

Stack Overflow用户

发布于 2022-11-15 14:48:22

你可以使用列表理解-

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
['hero1', 'hero2', 'hero3']

请注意,如果英雄列表很大,这会稍微慢一些,所以将您的输入转换为dict可能是个好主意。

一个更好的方法可能是创建一个键为hero_id而value为hero_name的数据集-

代码语言:javascript
复制
# 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)

输出:

代码语言:javascript
复制
['hero1', 'hero2', 'hero3']
票数 0
EN

Stack Overflow用户

发布于 2022-11-15 16:34:15

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

这样可以避免嵌套循环。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74447452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档