Python字典推导式生成排序键字典输出异常问题咨询
错误原因
- 字典推导式用了错误的双重循环逻辑:你写的
{i: j for i in sorted(r.keys()) for j in r.values()}属于嵌套遍历,每拿到一个排序后的键i,都会遍历一遍r的所有值,最终每个键都会被覆盖为遍历到的最后一个值,因此得到的结果所有键的取值都相同。 - 变量名大小写不匹配:代码中定义的是大写变量
X,打印的是小写变量x,Python对大小写敏感,严格运行时会直接报变量未定义的错误,你给出的输出应该是手动修正了大小写后的运行结果。 - 补充说明:Python 3.7及以上版本才会默认保留字典的插入顺序,低于该版本的Python环境无法保证字典键的顺序固定。
修正方法
只需要遍历排序后的键,直接取原字典中对应键的值即可,同时统一变量名:
a = {'a': 1, 'b': 2} r = {'b': 2, 'a': 1} x = {k: r[k] for k in sorted(r.keys())} print(x) print(x == a)
运行输出:
{'a': 1, 'b': 2} True
也可以直接对字典做排序(默认遍历字典的键),简化为x = {k: r[k] for k in sorted(r)},效果完全一致。
内容的提问来源于stack exchange,提问作者Zy Taga
相关产品推荐
相关产品推荐

