Python 3上的dict.keys()[0]

2024-05-20 17:33:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一句话:

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


Tags: inforreturnifdef错误randomkeys
3条回答

dict.keys()是字典视图。只要直接在字典上使用list()即可,如果需要键列表,则项0将是(任意)字典顺序中的第一个键:

list(prob)[0]

或者最好还是用:

next(iter(dict))

这两种方法都可以在Python 23中工作,next()选项对于python2来说肯定比使用dict.keys()更有效。不过,请注意,字典有no设置顺序,并且您将not知道将首先列出哪个键。

如果您试图找到maximum键,请将max()dict.get一起使用:

def Ciudad(prob):
    return max(prob, key=prob.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()将其向前推进一个键并获取第一个键。

如果需要遍历键,则绝对不需要构造列表:

for key in dict:
    ...

与使用list()相比,这一切都是有利的,因为这意味着列表没有被构造—使它更快、更节省内存(因此keys()的默认行为在3.x中更改的原因)。即使在Python2.x中,您也最好做next(iter(dict.iterkeys())

注意所有这些都适用于dict.values()dict.items()

我已经成功地把字典里的单词变成了一个列表。 因此,对于dic.keys()、dic.values()和dic.items(),在Python3.6中,您可以:

dic = {'a':3, 'b':2, 'c':3}
print(dic)

dictkeys = dic.keys() # or values/items
print(dictkeys)

keylist = []
keylist.extend(iter(dictkeys)) # my big revelation
print('keylist', keylist)

相关问题 更多 >