在Python 3上,dict.keys()[0]

9 浏览
0 Comments

在Python 3上,dict.keys()[0]

我有这个句子:

def Ciudad(prob):
    numero = random.random()
    ciudad = list(prob.keys())[0]
    for i in list(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

这是一个版本问题吗?我正在使用Python 3.3.2。

0
0 Comments

在Python 3中,将字典(dict)的键(keys)转换为列表(list)时,可能会出现"dict.keys()[0]"这个问题。这个问题的原因是在Python 3中,字典的键(keys)对象是一个视图(view),而不是一个列表(list),因此无法通过索引来访问其中的元素。解决这个问题的方法是将键(keys)对象转换为列表(list)。下面是一个示例代码:

dic = {'a':3, 'b':2, 'c':3}
print(dic)
dictkeys = list(dic.keys()) # 将键(keys)对象转换为列表(list)
print(dictkeys)
keylist = []
keylist.extend(iter(dictkeys))
print('keylist', keylist)

通过将键(keys)对象转换为列表(list),我们可以使用索引来访问其中的元素,例如使用"dictkeys[0]"来获取第一个键。这样就解决了"dict.keys()[0]"这个问题。

需要注意的是,在Python 2中,字典的键(keys)对象是一个列表(list),因此可以直接使用索引来访问其中的元素。但在Python 3中,为了提高性能和内存效率,字典的键(keys)对象被设计为一个视图(view),这意味着它不会占用额外的内存,并且可以动态地反映字典的变化。因此,在Python 3中,如果想要通过索引访问字典的键(keys),需要先将其转换为列表(list)。

0
0 Comments

在Python 3.x中,dict.keys()函数不再返回一个列表,而是返回一个可迭代对象(具体来说是字典视图)。值得注意的是,dict本身也是一个可迭代对象,可以用来迭代字典的键。

如果你想要获取第一个键,可以使用next(iter(dict))来代替。(需要注意的是,在Python 3.6之前,字典是无序的,所以“第一个”元素是任意的。从Python 3.6开始,它将基于插入顺序。如果你在旧版本或跨版本兼容性中需要这种行为,可以使用collections.OrderedDict)。

这个方法非常简单:我们使用iter()从字典视图获取可迭代对象,然后使用next()将其向前移动一位并获取第一个键。

如果你需要遍历字典的键,那么完全没有必要构建一个列表:

for key in dict:
    ...

与使用list()相比,这些方法都有优势,因为它们不需要构建一个列表,从而使得速度更快、占用更少的内存(这也是为什么在Python 3.x中keys()的默认行为发生了改变)。即使在Python 2.x中,使用next(iter(dict.iterkeys())也更好一些。

需要注意的是,上述方法同样适用于dict.values()dict.items()

next()函数需要一个迭代器作为参数,而不是一个可迭代对象。next(iter(dict))更加简洁一些。

是的,我也刚刚发现了这一点。

需要注意的是,从Python 3.6开始,默认情况下字典是有序的。我知道这篇文章很可能是之前的内容,但更新这一点可能是值得的。

确实,我已经改变了关于“第一个”元素的说明,以明确这个区别。但这并不改变问题的核心,相同的方法仍然是最优的,只是结果更具体了。

同意。

0
0 Comments

在Python 3中,使用dict.keys()方法会返回一个字典视图(dictionary view)。如果你需要获取字典中的键的列表,并且想要获取列表中的第一个键,那么可以直接在字典上使用list()方法,不需要使用dict.keys()。这样得到的列表中的第一个元素将是字典中的第一个键,尽管字典的顺序是任意的。代码如下:

list(prob)[0]

另外一种更好的方法是使用next(iter(dict)),该方法对Python 2和3都适用,并且对于Python 2而言,next()方法比使用dict.keys()更高效。需要注意的是,字典没有固定的顺序,你不能确定哪个键会被列在第一个。

如果你想要找到字典中的最大键,可以使用max()函数结合dict.get方法。代码如下:

def Ciudad(prob):
    return max(prob, key=prob.get)

对于给定的prob字典,该函数的结果是相同的,因为你的代码在if语句的不同分支中没有区别。

0