如果a mydict不为空,我访问任意元素:
mydict[mydict.keys()[0]]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点?
字典在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保留插入顺序
我想让我的程序"banana"从字典中打印出来.最简单的方法是什么?
请注意,我并不是试图让我的程序打印出与之相关的值"banana",而是打印出"banana"一个for循环,所以当我运行它时,每个键也会打印出来.
这是我的字典:
prices = {
"banana" : 4,
"apple" : 2,
"orange" : 1.5,
"pear" : 3
}
Run Code Online (Sandbox Code Playgroud) 我有这句话:
def Ciudad(prob):
numero = random.random()
ciudad = prob.keys()[0]
for i in prob.keys():
if(numero > prob[i]):
if(prob[i] > prob[ciudad]):
ciudad = i
else:
if(prob[i] > prob[ciudad]):
ciudad = i
return ciudad
Run Code Online (Sandbox Code Playgroud)
但是当我调用它时,这个错误弹出:
TypeError: 'dict_keys' object does not support indexing
Run Code Online (Sandbox Code Playgroud)
这是版本问题吗?我正在使用Python 3.3.2