Python中列表对应元素匹配及特殊JSON解析问题求助
解决你的三个Python列表匹配与JSON解析问题
我来一步步帮你搞定这几个问题,从基础的列表对应到特殊JSON解析,再到最终的匹配逻辑:
1. 建立两个列表的对应关系(快速匹配元素)
既然你已经明确List1和List2的元素是按顺序一一对应的,最方便的方式是把它们打包成一个字典,这样就能通过emoji直接查到对应的name,或者反过来。
举个例子:
list1 = ["name1", "name2", "name3", "name4", "name5"] list2 = ["emoji1", "emoji2", "emoji3", "emoji4", "emoji5"] # 建立emoji到name的映射字典 emoji_to_name = dict(zip(list2, list1)) # 反过来,name到emoji的映射 name_to_emoji = dict(zip(list1, list2)) # 现在查找emoji5对应的name5就很简单了 target_emoji = "emoji5" if target_emoji in emoji_to_name: print(f"对应的name是:{emoji_to_name[target_emoji]}") # 输出 name5
如果只是想通过位置索引匹配(比如第5个元素),直接用下标访问就行:
# 注意Python列表是0索引,第5个元素的索引是4 index = 4 print(f"List1第5个元素:{list1[index]},对应List2的:{list2[index]}")
2. 解析特殊格式的emoji背包数据
你拿到的JSON格式是一个包含单个对象的数组,对象里的emojis字段是逗号分隔的字符串(还包含空值,比如,,)。解析步骤如下:
优化你的请求代码
首先,你的请求代码可以简化,不需要混用ast.literal_eval和json.loads——因为返回的是标准JSON,直接用json.loads就足够了:
import aiohttp import json async def get_player_emojis(): scan_url = "privatelink" # 替换成你的实际链接 async with aiohttp.ClientSession() as cs: async with cs.get(scan_url) as r: # 直接用json.loads解析响应内容 response_data = json.loads(await r.text()) # 取出emojis字符串(注意response_data是数组,取第一个元素) emojis_str = response_data[0]["emojis"] # 分割成列表,并过滤掉空字符串(处理,,的情况) player_emojis = [emoji for emoji in emojis_str.split(',') if emoji] return player_emojis
这样player_emojis就是一个干净的、玩家拥有的emoji列表,比如["emoji10", "emoji20", "emoji11", ...]。
3. 匹配玩家拥有的emoji到对应的name
结合前面两步,我们可以轻松找到玩家拥有的emoji5对应的name5:
# 先拿到玩家的emoji列表(假设你已经通过上面的函数获取到了) player_emojis = await get_player_emojis() # 建立emoji到name的映射 list1 = ["name1", "name2", "name3", "name4", "name5"] list2 = ["emoji1", "emoji2", "emoji3", "emoji4", "emoji5"] emoji_to_name = dict(zip(list2, list1)) # 查找emoji5是否在玩家背包里,并获取对应的name target_emoji = "emoji5" if target_emoji in player_emojis: print(f"你拥有的{target_emoji}对应的名称是:{emoji_to_name[target_emoji]}") else: print("你还没有这个emoji哦")
额外提示:批量匹配所有拥有的emoji对应的name
如果想一次性拿到玩家所有拥有的emoji对应的name,可以这样做:
owned_names = [emoji_to_name[emoji] for emoji in player_emojis if emoji in emoji_to_name] print("你拥有的emoji对应的名称列表:", owned_names)
内容的提问来源于stack exchange,提问作者Break
相关产品推荐
相关产品推荐

