首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中,什么决定了遍历kwargs时的顺序?

在Python中,什么决定了遍历kwargs时的顺序?
EN

Stack Overflow用户
提问于 2012-01-24 03:42:02
回答 6查看 6.3K关注 0票数 12

在Python语言中,我编写了这个函数来自学**kwargs在Python语言中的工作原理:

代码语言:javascript
运行
复制
def fxn(a1, **kwargs):
    print a1
    for k in kwargs:
        print k, " : ", kwargs[k]

然后,我使用以下命令调用此函数

代码语言:javascript
运行
复制
fxn(3, a2=2, a3=3, a4=4)

下面是我的Python解释器打印的输出:

代码语言:javascript
运行
复制
3
a3  :  3
a2  :  2
a4  :  4

为什么for循环先打印a3的值,然后再打印a2的值,即使我先将a2输入到函数中?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-24 03:43:58

kwargs是一种字典。字典是无序的-简单地说,顺序是未指定的,是一个实现细节。在幕后偷看会发现,根据项目的哈希值、插入顺序等,顺序会有很大的不同,所以你最好不要依赖任何相关的东西。

票数 24
EN

Stack Overflow用户

发布于 2012-01-24 03:44:26

这是一本字典。而且,正如文档中提到的,字典没有顺序(来自http://docs.python.org/tutorial/datastructures.html#dictionaries):

最好将字典视为键:值对的无序集合,要求键是唯一的(在一个字典内)。

但是你可以让它按的顺序处理,就像这样:

使用sorted()

def fxn( a1,**kwargs):打印排序(Kwargs)中k的a1:#请注意"kwargs“替换为"sorted(kwargs)”print k,“:",kwargsk

  • 或使用OrderedDict类型(您可以将OrderedDict对象作为包含所有键值对的参数传递):

从集合导入OrderedDict def fxn( a1,ordkwargs):在ordkwargs中打印k的a1: print k,“:",ordkwargsk fxn(3,OrderedDict(‘a2’,2),('a3',3),(‘a4’,4)

票数 11
EN

Stack Overflow用户

发布于 2017-01-13 19:49:54

最后在3.6 release中引入了这一点:dict现在是有序的,因此关键字参数顺序保持不变。

代码语言:javascript
运行
复制
Python 3.6.0 (default, Jan 13 2017, 13:27:48) 
>>> def print_args(**kwargs):
...     print(kwargs.keys())
... 
>>> print_args(first=1, second=2, third=3)
dict_keys(['first', 'second', 'third'])
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8977594

复制
相关文章

相似问题

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