Python字典嵌套值迁移问题:代码错误排查与正确实现方案
让我来帮你分析代码里的问题,然后给出正确的实现方式:
错误原因分析
- 多层循环逻辑错误导致重复添加:你写了四层嵌套循环,外层遍历
player_statistics的玩家后,又遍历了player_playedgame的所有玩家,这就导致每个玩家的每个gameid会和所有玩家的gameid做匹配,重复执行append操作,所以才会出现多次添加嵌套列表的情况。 - 错误添加了列表而非目标字符串:
player_playedgame中每个gameid对应的值是一个列表(比如['played']),你直接append这个列表,就会把整个列表作为元素插入,而不是取出里面的字符串值。
正确代码实现
方式1:直接修改原字典
这种方式会直接更新player_statistics的内容:
# 遍历每个玩家ID,同时获取两个字典中对应的玩家数据 for player_id in player_statistics: # 获取当前玩家的游戏统计和游玩状态数据 user_stats = player_statistics[player_id] user_played = player_playedgame[player_id] # 遍历当前玩家的每个游戏ID for game_id in user_stats: # 取出游玩状态的字符串(因为user_played[game_id]是单元素列表) play_status = user_played[game_id][0] # 将字符串添加到统计列表的末尾 user_stats[game_id].append(play_status)
方式2:创建新字典(不修改原数据)
如果需要保留原始的player_statistics,可以创建一个新的字典存储结果:
player_statistics_updated = {} for player_id in player_statistics: # 初始化当前玩家的统计数据 updated_player_data = {} original_stats = player_statistics[player_id] play_status_data = player_playedgame[player_id] for game_id in original_stats: # 复制原列表,避免修改原始数据 updated_game_list = original_stats[game_id].copy() # 添加游玩状态字符串 updated_game_list.append(play_status_data[game_id][0]) updated_player_data[game_id] = updated_game_list player_statistics_updated[player_id] = updated_player_data
运行任意一种方式后,你都会得到符合预期的结果:每个gameid对应的列表末尾会添加单个'played'或'notplayed'字符串,不会出现重复或嵌套列表的问题。
内容的提问来源于stack exchange,提问作者Miracle
相关产品推荐
相关产品推荐

