相关疑难解决方法(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字典:键()和值()总是相同的顺序?

它看起来像返回的列表keys()values()字典的方法总是一对一的映射(假设字典在调用2方法之间没有改变).

例如:

>>> d = {'one':1, 'two': 2, 'three': 3}
>>> k, v = d.keys(), d.values()
>>> for i in range(len(k)):
    print d[k[i]] == v[i]

True
True
True
Run Code Online (Sandbox Code Playgroud)

如果你不改变调用keys()和调用之间的字典values(),假设上面的for循环总是打印True是错误的吗?我找不到任何证明这一点的文件.

python

285
推荐指数
6
解决办法
9万
查看次数

Get:TypeError:'dict_values'对象在使用python 3.2.3时不支持索引

这是我的代码:

{names[i]:d.values()[i] for i in range(len(names))}
Run Code Online (Sandbox Code Playgroud)

这在使用python 2.7.3时完全正常; 但是,当我使用python 3.2.3时,我收到一个错误说明'dict_values' object does not support indexing.如何修改代码以使其与3.2.3兼容?

python python-3.x

100
推荐指数
3
解决办法
10万
查看次数

有效地按Python 3.6+中的位置访问字典项

我理解字典是在Python 3.6+中排序插入,作为3.6中的实现细节和3.7+中的官方.

鉴于它们是有序的,似乎很奇怪,没有方法可以通过插入顺序检索字典的i项.该唯一的解决方案可出现有O(ñ)的复杂性,无论是:

  1. 通过O(n)进程转换为列表然后使用list.__getitem__.
  2. enumerate循环中的字典项,并在达到所需索引时返回值.同样,O(n)时间复杂度.

由于从list具有O(1)复杂度的项目中获取项目,是否有办法通过字典实现相同的复杂性?无论是定期dict还是collections.OrderedDict工作.

如果不可能,是否存在阻止这种方法的结构性原因,或者这只是一个尚未考虑/实施的特征?

python dictionary python-3.x python-internals

26
推荐指数
1
解决办法
2567
查看次数

在python中通过索引访问字典值

我想从Python字典中获取密钥索引的值.有没有办法得到这样的东西?

dic = {}
value_at_index = dic.ElementAt(index)
Run Code Online (Sandbox Code Playgroud)

哪里index是整数

python indexing dictionary

23
推荐指数
4
解决办法
8万
查看次数

我什么时候应该在 python 中引发 LookupError ?

Python 的内置异常文档定义LookupError为:

当映射或序列上使用的键或索引无效时引发的异常的基类:IndexError、KeyError。这可以通过 codecs.lookup() 直接引发。

这个基类应该只在捕获使用索引和键访问字典的尝试部分时使用,当一个人想要速记捕获两者时,还是有另一种情况下你会使用它?

python lookup exception keyerror

9
推荐指数
1
解决办法
6421
查看次数

为什么我无法通过索引获取字典键?

从 Python 3.7开始,字典是有序的。那么为什么我不能通过索引获取键呢?

python dictionary python-3.x

5
推荐指数
1
解决办法
1110
查看次数

按索引获取字典中的有序键

这看起来应该是一件相当简单的事情,但我一直无法做到。假设我有一本字典,例如:

d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
Run Code Online (Sandbox Code Playgroud)

我想按照字典中存储的顺序访问键。我本来希望这能起作用:

print d.keys()[0]
banana
Run Code Online (Sandbox Code Playgroud)

但实际结果是:

orange
Run Code Online (Sandbox Code Playgroud)

显然这是因为python 中的字典是无序的。我尝试过使用collections.OrderedDict

from collections import OrderedDict as odict
d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}
print odict(d).keys()
Run Code Online (Sandbox Code Playgroud)

但结果是一样的。

我怎样才能做到这一点?考虑到执行这项任务的明显复杂性,我应该这样做吗?我还能如何按顺序访问字典中的键?

python dictionary python-2.7

2
推荐指数
1
解决办法
2974
查看次数