
python如何同时循环两个字典
用户关注问题
希望了解Python中有没有简单的方式,可以一次循环访问两个字典中的键值对?
利用zip和字典的items()方法同时遍历两个字典
可以使用zip函数搭配两个字典的items()方法,来同时遍历两个字典中的键值对。例如:
for (key1, value1), (key2, value2) in zip(dict1.items(), dict2.items()):
print(key1, value1, key2, value2)
这里假设两个字典的长度相同,zip会在最短的字典遍历结束后停止。
如果要同时循环的两个字典长度不同,应该如何保证遍历时不会丢失信息?
使用itertools.zip_longest可以适配不同长度的字典遍历
当两个字典长度不一致时,使用标准的zip会以较短的字典为限截断遍历。可以借助itertools模块中的zip_longest函数来解决:
from itertools import zip_longest
for (k1, v1), (k2, v2) in zip_longest(dict1.items(), dict2.items(), fillvalue=(None, None)):
print(k1, v1, k2, v2)
这样即使某个字典已经遍历完,仍会继续直到最长的字典结束,未对应的项为None。
除了zip和items方法,还有什么Python技巧或库函数能同时循环两个字典?
使用索引遍历字典的键列表或基于键集合的循环
可以先获得两个字典的键列表,然后通过索引同时访问:
keys1 = list(dict1.keys())
keys2 = list(dict2.keys())
length = min(len(keys1), len(keys2))
for i in range(length):
print(keys1[i], dict1[keys1[i]], keys2[i], dict2[keys2[i]])
另一种方式是以键集合的并集或交集进行遍历,这样可以避免因键不匹配造成的问题:
for key in dict1.keys() & dict2.keys():
print(key, dict1[key], dict2[key])
这种方法适合想要对同样键的值进行比较或处理。