如何同时遍历两个字典并提取对应索引的值?
解决同时遍历两个字典对应索引值的问题
咱们先梳理下你原来代码里的几个问题,这也是导致它跑不起来的核心原因:
- 不管是Python 2还是3,直接用
color.values()[i]都有问题:Python 3里dict.values()返回的是视图对象,不是列表,没法直接用索引;Python 2里虽然是列表,但你嵌套的for循环会让每个color值都对应所有fruit值,完全不是你要的“对应索引配对”的效果 - while循环和嵌套for的逻辑混在一起,导致循环逻辑混乱,不符合你的需求
接下来给你两个可行的解决方案,根据你的Python版本选就行:
方案一:Python3.7+(字典默认保留插入顺序)
从Python3.7开始,普通字典会记住键值对的插入顺序,所以直接把两个字典的值转成列表,用zip就能轻松配对对应索引的元素:
color = {'red': 1, 'blue': 2, 'green': 3} fruit = {'cherry': 4, 'berry': 5, 'apple': 6} levels = [1000, 925, 850, 700, 500, 400, 300, 250, 200, 150, 100] levels.sort() # 把字典的值转换成列表,保证顺序和插入时一致 color_values = list(color.values()) fruit_values = list(fruit.values()) # 用zip同时遍历三组对应的数据,取前3组和你原来的i<3逻辑一致 for c_val, f_val, level in zip(color_values[:3], fruit_values[:3], levels[:3]): print(c_val) print(f_val) print(f'{level} mb EDR Normalized Anomalies')
这段代码的输出就是你想要的:
1 4 100 mb EDR Normalized Anomalies 2 5 150 mb EDR Normalized Anomalies 3 6 200 mb EDR Normalized Anomalies
(注:levels排序后是升序,所以前三个是100、150、200,和你原来的排序逻辑一致)
方案二:Python3.6及以下版本(需要保证字典有序)
如果你的Python版本低于3.7,普通字典是无序的,这时候可以用collections.OrderedDict来确保键值对的顺序:
from collections import OrderedDict # 用OrderedDict定义,保证顺序和插入一致 color = OrderedDict([('red', 1), ('blue', 2), ('green', 3)]) fruit = OrderedDict([('cherry', 4), ('berry', 5), ('apple', 6)]) levels = [1000, 925, 850, 700, 500, 400, 300, 250, 200, 150, 100] levels.sort() color_values = list(color.values()) fruit_values = list(fruit.values()) for c_val, f_val, level in zip(color_values[:3], fruit_values[:3], levels[:3]): print(c_val) print(f_val) print(f'{level} mb EDR Normalized Anomalies')
这样就能保证两个字典的值按你定义的顺序对应,实现和方案一一样的效果。
内容的提问来源于stack exchange,提问作者ak_cira
相关产品推荐
相关产品推荐

