我正努力为我的节目取英雄的名字。
让我们假设我有一个带有英雄ids的数组:hero_ids = [1, 15, 27, 44, 135]
还有一个有英雄信息列表的白痴:
{
"heroes": [
{
"name": "hero1",
"id": 1,
},
{
"name": "hero2",
"id": 2,
},
{
"name": "hero3",
"id": 3,
},问:我如何获得每一个英雄身份的英雄名字列表?
我花了3个小时在这上面,但不明白这个想法。我尝试过列表理解(似乎它们不能与dicts一起使用),手动索引遍历hero_ids数组或英雄数组,但没有运气。
发布于 2022-11-15 14:48:22
你可以使用列表理解-
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']请注意,如果英雄列表很大,这会稍微慢一些,所以将您的输入转换为dict可能是个好主意。
一个更好的方法可能是创建一个键为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']发布于 2022-11-15 16:34:15
一个比建议的方法更短的方法是使用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)https://stackoverflow.com/questions/74447452
复制相似问题