对sublime text中运行python3的for循环存在的一个问题

发布于 2022-09-06 00:11:05 字数 1110 浏览 18 评论 0

如下代码:

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乄_柒ぐ汐 2022-09-13 00:11:05

python 2中字典的键是无序的,python 3中最新的版本会保留字典的键添加顺序(不保证将来的版本中保留此特性)。

陌若浮生 2022-09-13 00:11:05

或许你需要 from collections import OrderedDict

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文