我有一句话:
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
但当我称之为这个错误时:
TypeError: 'dict_keys' object does not support indexing
是版本问题吗?我使用的是Python3.3.2
dict.keys()
是字典视图。只要直接在字典上使用list()
即可,如果需要键列表,则项0将是(任意)字典顺序中的第一个键:或者最好还是用:
这两种方法都可以在Python 2和3中工作,
next()
选项对于python2来说肯定比使用dict.keys()
更有效。不过,请注意,字典有no设置顺序,并且您将not知道将首先列出哪个键。如果您试图找到maximum键,请将
max()
与dict.get
一起使用:对于任何给定的
prob
字典,函数结果肯定是相同的,因为您的代码在if
语句的随机数比较分支之间的代码路径上没有差异。在Python 3.x中,^{} 不返回列表,而是返回一个iterable(特别是,a dictionary view)。值得注意的是,
dict
本身也是一个iterable键。如果要获取第一个键,请改用} )。
next(iter(dict))
。(请注意,在Python 3.6字典无序之前,“first”元素是任意的。从3.6开始,它将基于插入顺序。如果在旧版本中或在跨版本兼容性中需要这种行为,可以使用^{这非常简单:我们使用
iter()
从dictionary视图中获取iterable,然后使用next()
将其向前推进一个键并获取第一个键。如果需要遍历键,则绝对不需要构造列表:
与使用
list()
相比,这一切都是有利的,因为这意味着列表没有被构造—使它更快、更节省内存(因此keys()
的默认行为在3.x中更改的原因)。即使在Python2.x中,您也最好做next(iter(dict.iterkeys())
。注意所有这些都适用于
dict.values()
和dict.items()
。我已经成功地把字典里的单词变成了一个列表。 因此,对于dic.keys()、dic.values()和dic.items(),在Python3.6中,您可以:
相关问题 更多 >
编程相关推荐