如何用Python高效在同一行打印两个不同字典?优化低效方案
高效实现两个字典的同行并排打印
嘿,我来帮你搞定这个问题!你的核心需求是把两个字典的内容按对应行并排打印,同时解决原代码执行慢的问题对吧?先拆解一下原代码里的几个问题,这也是导致耗时久的关键:
- 函数
dictList里存在变量名错误:参数是dict但代码里用了dict_,而且lista_finale根本没定义,应该用你初始化的list; - 多余的嵌套循环和重复排序操作,完全没必要,反而拖慢了执行速度;
- 还有拼写错误,比如
valore1应该是value1,这些错误其实会导致代码根本跑不通,更别说效率了。
高效解决方案
我们可以用Python内置的sorted和zip函数来简化操作,这两个都是底层优化过的内置方法,效率很高。步骤如下:
- 先把两个字典的项按「值的第二个元素」倒序排序(和你想要的输出顺序一致);
- 用
zip把排序后的两个字典项一一配对; - 用格式化字符串直接打印每一对的内容。
完整代码示例:
# 先修正字典定义(原代码里的city/town应该是字符串,否则会报错) Fantasy = {"Gotham": ["city", 2000], "Smallville": ["town", 40], "Nuketown": ["town", 60]} Real = {"London": ["city", 1500], "Whitby": ["town", 40], "Liverpool": ["city", 1000]} # 按值的第二个元素倒序排序两个字典的项 sorted_fantasy = sorted(Fantasy.items(), key=lambda item: item[1][1], reverse=True) sorted_real = sorted(Real.items(), key=lambda item: item[1][1], reverse=True) # 并排打印每一组内容 for (fantasy_key, fantasy_val), (real_key, real_val) in zip(sorted_fantasy, sorted_real): # 打印键 print(f"{fantasy_key:<10}\t{real_key:<10}") # 打印对应的值(类型+数字) print(f"{fantasy_val[0]:<10}\t{fantasy_val[1]:<10}\t{real_val[0]:<10}\t{real_val[1]:<10}") print() # 可选:添加空行分隔每组内容
输出结果
运行后会得到和你预期一致的输出:
Gotham London city 2000 city 1500 Nuketown Liverpool town 60 city 1000 Smallville Whitby town 40 town 40
为什么这个方案高效?
sorted是Python内置的高效排序算法(Timsort),比手动循环排序快得多;zip直接在迭代器层面配对元素,不需要额外创建冗余列表;- 整个逻辑没有多余的嵌套循环,代码简洁且执行效率高,完全不会出现30秒的耗时问题。
内容的提问来源于stack exchange,提问作者Giacomo Cerretini
相关产品推荐
相关产品推荐

