Python字典的.keys()和.values()返回结果是否保证顺序一致?
问题解答
结论完全取决于你使用的Python版本:
- Python 3.7及更高正式版本:
a == b恒为True
从Python 3.7开始,语言标准正式规定字典默认保留插入顺序,keys()、values()、items()三个方法返回的视图对象,迭代顺序完全和键值对的插入顺序一致,同位置的key和value严格对应,所以你给出的代码里zip拼接后的键值对和原字典完全一致,生成的新字典和原字典相等。 - Python 3.6版本:仅CPython实现下成立,不属于通用保证
Python 3.6的CPython解释器首次实现了字典保留插入顺序的特性,但这属于实现细节,没有写入语言标准,如果你使用其他非CPython的解释器(比如早期版本的PyPy等),顺序不保证一致,a == b的结果不确定。 - Python 3.5及更早版本:完全不保证成立
更早版本的Python字典是无序结构,keys()和values()的迭代顺序没有对应规则,只要字典有过元素删除、新增的操作,两个返回值的顺序大概率不匹配,a == b经常会返回False。
另外补充更规范的写法:你不需要分别取keys()和values()再zip,直接迭代a.items()就能拿到一一对应的键值对,写法更简洁也兼容所有Python版本:
b = {k:v for k,v in a.items()}
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

