相关疑难解决方法(0)

是否在Python 3.6+中订购了字典?

字典在Python 3.6中排序(至少在CPython实现下),与之前的版本不同.这似乎是一个重大变化,但它只是文档中的一小段.它被描述为CPython实现细节而不是语言特性,但也暗示这可能成为未来的标准.

在保留元素顺序的同时,新字典实现如何比旧字典实现更好?

以下是文档中的文字:

dict()现在使用PyPy开创的"紧凑"表示.与Python 3.5相比,新dict()的内存使用量减少了20%到25%.PEP 468(在函数中保留**kwargs的顺序.)由此实现.这个新实现的顺序保留方面被认为是一个实现细节,不应该依赖(这可能会在未来发生变化,但是在更改语言规范之前,希望在几种版本的语言中使用这个新的dict实现为所有当前和未来的Python实现强制命令保留语义;这也有助于保持与随机迭代顺序仍然有效的语言的旧版本的向后兼容性,例如Python 3.5).(由INADA Naoki在issue 27350中提供.最初由Raymond Hettinger提出的想法.)

2017年12月更新:Python 3.7 保证dict保留插入顺序

python dictionary python-3.x python-internals python-3.6

386
推荐指数
5
解决办法
8万
查看次数

Python中的False == 0和True == 1是一个实现细节还是由语言保证?

难道保证False == 0True == 1,在Python(假设他们没有被用户重新分配)?例如,无论Python的版本(现有的,可能的,未来的版本)是什么,它是否以任何方式保证以下代码将始终产生相同的结果?

0 == False  # True
1 == True   # True
['zero', 'one'][False]  # is 'zero'
Run Code Online (Sandbox Code Playgroud)

任何对官方文档的引用都将非常感谢!

编辑:正如许多答案所述,bool继承自int.因此,问题可以改写为:"文档是否正式表明程序员可以依赖于从整数继承的布尔值,以及值01?".这个问题与编写由于实现细节而不会失败的健壮代码有关!

python boolean equality language-specifications

230
推荐指数
3
解决办法
23万
查看次数

将列表转换为集更改元素顺序

最近我注意到,当我转换listset元素的顺序发生变化,由字符排序.

考虑这个例子:

x=[1,2,20,6,210]
print x 
# [1, 2, 20, 6, 210] # the order is same as initial order

set(x)
# set([1, 2, 20, 210, 6]) # in the set(x) output order is sorted
Run Code Online (Sandbox Code Playgroud)

我的问题是 -

  1. 为什么会这样?
  2. 如何在不丢失初始订单的情况下进行设置操作(尤其是设置差异)?

python set

94
推荐指数
7
解决办法
10万
查看次数

Dict/Set解析顺序一致性

采用可清洗对象(如dict键或set项目)的容器.因此,字典只能有一个带有值的键1,1.0或者True等等.(注意:有些简化 - 允许哈希冲突,但这些值被认为是相等的)

我的问题是:解析顺序是否定义良好,是否可以跨实现预测结果对象?例如,OSX Python 2.7.11和3.5.1解释dict如下:

>>> { True: 'a', 1: 'b', 1.0: 'c', (1+0j): 'd' }
{True: 'd'}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,似乎保留了第一个键和最后一个值.

类似,在以下情况下set:

>>> { True, 1, 1.0, (1+0j) }
set([(1+0j)])
Run Code Online (Sandbox Code Playgroud)

这里似乎保留了最后一项.

但(如评论中所述):

>>> set([True, 1, 1.0])
set([True])
Run Code Online (Sandbox Code Playgroud)

现在保留了iterable中的第一个.

文档指出项目的顺序(例如in dict.items)是未定义的,但我的问题是指构造 dictset对象的结果.

python dictionary set python-internals

18
推荐指数
1
解决办法
292
查看次数