对sublime text中运行python3的for循环存在的一个问题
如下代码:
#python version:3.5.3
Data = {'T100':['I1','I2','I5'],
'T200':['I2','I4'],
'T300':['I2','I3'],
'T400':['I1','I2','I4'],
'T500':['I1','I3'],
'T600':['I2','I3'],
'T700':['I1','I3'],
'T800':['I1','I2','I3','I5'],
'T900':['I1','I2','I3']}
for each in Data:
print(each)
在sublime中运行我发现输出内容的顺序不是固定的,会变。
有时就输出 T800,T100,T700,T900,T500,T400,T200,T300,T600
有时就输出 T200,T600,T100,T500,T700,T400,T900,T300,T800
然后我将sublime内编译器换成python2,用py2运行这段代码,发现结果是固定的?T800,T100,T300,T400,T700,T900,T200,T400,T600
这时我认为是python3版本的问题。
随后,我在iTerm和Spyder中都用python3运行了这段代码,发现结果不像是在sublime中那样,结果是固定不会变的。
iTerm中顺序固定为T300,T900,T100,T200,T600,T500,T800,T400,T700
Spyder中顺序固定为T400,T900,T500,T300,T800,T200,T700,T100,T600
那么问题来了,是什么导致了python3版本的for循环在sublime text中运行出现了异样?
还有一个问题是迭代器内元素为什么会是这样的顺序,和在内存中存储的位置有关吗?为什么不设计成按照T100,T200,T300,T400,T500,T600,T700,T800
的顺序进行返回
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
python 2中字典的键是无序的,python 3中最新的版本会保留字典的键添加顺序(不保证将来的版本中保留此特性)。
或许你需要 from collections import OrderedDict