首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关键字在Python 3中会自动排序吗?

关键字在Python 3中会自动排序吗?
EN

Stack Overflow用户
提问于 2018-08-22 08:48:53
回答 1查看 103关注 0票数 0

我正在研究Python3 tutorial on keyword arguments,由于以下代码,无法重现输出:

代码语言:javascript
复制
def cheeseshop(kind, *arguments, **keywords):
    print("-- Do you have any", kind, "?")
    print("-- I'm sorry, we're all out of", kind)
    for arg in arguments:
        print(arg)
    print("-" * 40)
    for kw in keywords:
        print(kw, ":", keywords[kw])

cheeseshop("Limburger", "It's very runny, sir.",
           "It's really very, VERY runny, sir.",
           shopkeeper="Michael Palin",
           client="John Cleese",
           sketch="Cheese Shop Sketch")

-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
shopkeeper : Michael Palin
client : John Cleese
sketch : Cheese Shop Sketch 

我得到的是一个排序后的字典:

代码语言:javascript
复制
----------------------------------------
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch

所以我试着不调用cheeseshop():

代码语言:javascript
复制
>>> kw = {'shopkeeper':"Michael Palin", 'client':"John Cleese", 'sketch':"Cheese Shop Sketch"}
>>> kw
{'client': 'John Cleese', 'shopkeeper': 'Michael Palin', 'sketch': 'Cheese Shop Sketch'}

在3.5版本中,键看起来是自动排序的。但在2.7版本中,它们不是:

代码语言:javascript
复制
>>> kw
{'shopkeeper': 'Michael Palin', 'sketch': 'Cheese Shop Sketch', 'client': 'John Cleese'}

我必须在2.7中对它进行排序,才能同意3.5。

代码语言:javascript
复制
>>> for k in sorted(kw):
...     print(k + " : " + kw[k])
... 
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch

因此本教程中的语句:“请注意,关键字参数的打印顺序保证与它们在函数调用中提供的顺序相匹配。”应仅适用于2.7版,而不适用于3.5版。这是真的吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-27 13:01:10

在@Ry和@abamert的评论之后,我升级到了Python3.7,有关如何从<3.7>源代码构建它的步骤,请参阅link1 link2link3。需要注意的是,Ubuntu 16.04的Python默认版本是/usr/bin中的2.7和3.5版本。升级后,3.7驻留在/usr/local/bin中。所以我们可以有三个版本共存。

正如他们所说的,不要依赖特定版本的键顺序,因为2.7、3.5和3.7版本的行为是不同的:

consistent/repeatable.

  • <3.5>顺序是随机的,而inconsistent.

  • <3.7>顺序是随机的,
  1. <2.7>顺序是随机的,因此是一致的。如果您希望对其进行排序,请使用。见下文。

例如:

代码语言:javascript
复制
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> kw = {'shopkeeper':"Michael Palin", 'client':"John Cleese", 'sketch':"Cheese Shop Sketch"}
>>> kw
{'client': 'John Cleese', 'shopkeeper': 'Michael Palin', 'sketch': 'Cheese Shop Sketch'}
>>>
>>> from collections import OrderedDict
>>> kws = OrderedDict(sorted(kw.items(), key = lambda x:x[0]))
>>> kws
OrderedDict([('client', 'John Cleese'), ('shopkeeper', 'Michael Palin'), ('sketch', 'Cheese Shop Sketch')])
>>> for i in kws:
...      print(i + " :\t" + kws[i])
...
client :        John Cleese
shopkeeper :    Michael Palin
sketch :        Cheese Shop Sketch
>>>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51958496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档