Python使用双层for循环遍历字典列表时无法获取对应值问题
问题排查与解决方案
问题原因
- 遍历逻辑错误:Python中直接遍历字典对象时,默认仅返回字典的键,因此你代码中
append(row)实际存入的全是Animal1、Animal2这类键名,没有获取到对应的动物值。同时你初始化new_data为列表类型,和你预期的字典类型不匹配。 - 预期输出逻辑不符合Python语法规则:Python字典不允许存在重复键,如果强制按照你给出的预期结构构造字典,前面重复键对应的值会被后续值覆盖,最终仅会保留最后一组键值对
{"Animal1": "rabbit", "Animal2": "sheep", "Animal3": "wolf"},无法实现保留所有数据的效果。
可行实现方案
方案1:收集所有动物值为列表
new_data = [] for rows in data: # 调用.values()方法遍历字典的值 for val in rows.values(): new_data.append(val) print(new_data)
输出结果:
['Dog', 'Cat', 'Snake', 'Mouse', 'Ant', 'Chicken', 'Fish', 'Elephant', 'Fox', 'rabbit', 'sheep', 'wolf']
方案2:按动物类别汇总所有值为字典
new_data = {"Animal1": [], "Animal2": [], "Animal3": []} for rows in data: # 调用.items()方法同时遍历键和值 for key, val in rows.items(): new_data[key].append(val) print(new_data)
输出结果:
{ "Animal1": ["Dog", "Mouse", "Fish", "rabbit"], "Animal2": ["Cat", "Ant", "Elephant", "sheep"], "Animal3": ["Snake", "Chicken", "Fox", "wolf"] }
内容的提问来源于stack exchange,提问作者Cristian
相关产品推荐
相关产品推荐

