Python技术问题:字典列表转字典并过滤指定字典元素
解决字典列表转字典并过滤特定项的问题
要搞定这个需求其实分两步就行:先剔除那些只包含rank和teamId的冗余字典,再把剩下的有效数据转换成方便用键值操作的字典结构。下面是具体的实现方案:
步骤1:过滤无效条目
我们可以通过检查字典的键集合来判断是否是需要排除的项——如果一个字典的键恰好是{'rank', 'teamId'},就跳过它:
original_data = [ {'DBNOs': 2, 'assists': 0, ...}, # 你的完整数据列表 {'rank': 6, 'teamId': 9}, {'rank': 10, 'teamId': 1}, {'rank': 13, 'teamId': 28} ] # 过滤掉仅含rank和teamId的字典 filtered_data = [item for item in original_data if item.keys() != {'rank', 'teamId'}]
步骤2:转换为字典结构
假设你想用每个玩家的playerId作为字典的键(这是数据里的唯一标识),用字典推导式就能快速完成转换:
# 以playerId为键,完整玩家数据为值 player_dict = {item['playerId']: item for item in filtered_data}
如果你不需要指定特定业务键,只是想把列表转成以索引为键的字典(比如{0: 第一个有效项, 1: 第二个有效项...}),可以这样写:
indexed_dict = {idx: item for idx, item in enumerate(filtered_data)}
完整示例代码
把两步合并起来,直接得到最终结果:
original_data = [ {'DBNOs': 2, 'assists': 0, 'boosts': 0, 'damageDealt': 129.820038, 'deathType': 'byplayer', 'headshotKills': 0, 'heals': 0, 'killPlace': 35, 'killPoints': 1295, 'killPointsDelta': 3.15819788, 'killStreaks': 0, 'kills': 1, 'lastKillPoints': 0, 'lastWinPoints': 0, 'longestKill': 3, 'mostDamage': 0, 'name': 'Esskedit', 'playerId': 'account.7a54835609584b9c943b213345ea7ffb', 'revives': 1, 'rideDistance': 2023.24707, 'roadKills': 0, 'teamKills': 1, 'timeSurvived': 655, 'vehicleDestroys': 0, 'walkDistance': 1113.72375, 'weaponsAcquired': 0, 'winPlace': 17, 'winPoints': 1281, 'winPointsDelta': -6.71400356}, {'rank': 6, 'teamId': 9}, {'rank': 10, 'teamId': 1}, {'rank': 13, 'teamId': 28} ] # 过滤+转换一步完成 player_dict = { item['playerId']: item for item in original_data if item.keys() != {'rank', 'teamId'} } # 输出结果 print(player_dict)
处理后你就得到了一个可以直接通过playerId快速查找玩家数据的字典,而且自动排除了那些仅含rank和teamId的条目。如果你的数据里有其他唯一键(比如name,不过名字可能重复),只需要把item['playerId']换成对应的键即可。
内容的提问来源于stack exchange,提问作者Raegis
相关产品推荐
相关产品推荐

