Python中如何将两个已排序字典的键按顺序映射生成新字典
按顺序映射两个已排序字典的键生成新字典的解决方案
原代码错误原因
嵌套循环的逻辑存在问题:对于Letter_Freq2中的每一个键,都会完整遍历Letter_Freq4的所有键,最终每个来自Letter_Freq2的键都会被赋值为遍历Letter_Freq4时最后一次迭代的键,因此会出现所有值相同的错误输出。
正确实现方案
两个字典已经按期望映射顺序完成排序的前提下,直接按位置配对两个字典的键即可。
简洁写法(推荐)
使用zip函数直接配对两个字典的键,再转为字典:
Letter_Freq2 = {'a':8,'b':6,'c':2} Letter_Freq4 = {'e':24,'g':4,'f':3} Letter_Freq = dict(zip(Letter_Freq2.keys(), Letter_Freq4.keys()))
运行后即可得到预期结果{'a':'e', 'b':'g','c':'f'}。
显式循环写法
如果需要更清晰的循环逻辑,也可以通过索引遍历配对:
Letter_Freq2 = {'a':8,'b':6,'c':2} Letter_Freq4 = {'e':24,'g':4,'f':3} keys2 = list(Letter_Freq2.keys()) keys4 = list(Letter_Freq4.keys()) Letter_Freq = {} # 需确保两个字典长度一致 for i in range(len(keys2)): Letter_Freq[keys2[i]] = keys4[i]
注意事项
- 该方案仅适用于Python 3.7及以上版本,这类版本的字典默认保留插入顺序;如果使用更早的Python版本,需要用
collections.OrderedDict定义两个有序字典来保证顺序正确。 - 操作前需要确保两个字典的长度一致,否则
zip仅会匹配到长度较短的字典的元素数量。
内容的提问来源于stack exchange,提问作者TaleOfGaming G
相关产品推荐
相关产品推荐

