22

给定一个 python 字典和一个 integer n,我需要访问nth 键。我需要在我的项目中多次重复执行此操作。

我写了一个函数来做到这一点:

def ix(self,dict,n):
    count=0
    for i in sorted(dict.keys()):
        if n==count:
            return i
        else:
            count+=1

但问题是,如果字典很大,重复使用时时间复杂度会增加。

有没有一种有效的方法来做到这一点?

4

3 回答 3

12

我猜你想做这样的事情,但由于字典没有任何顺序,所以键的顺序dict.keys可以是任何东西:

def ix(self, dct, n): #don't use dict as  a variable name
   try:
       return list(dct)[n] # or sorted(dct)[n] if you want the keys to be sorted
   except IndexError:
       print 'not enough keys'
于 2013-06-07T06:15:39.680 回答
12

dict.keys()返回一个列表,所以你需要做的就是dict.keys()[n]

但是,字典是无序的集合,因此第 n 个元素在这种情况下没有任何意义。

注意:dict.keys()python3 不支持索引

于 2013-06-07T06:17:25.767 回答
7

对于那些想要避免创建一个新的临时列表只是为了访问第 n 个元素的人,我建议使用迭代器。

from itertools import islice
def nth_key(dct, n):
    it = iter(dct)
    # Consume n elements.
    next(islice(it, n, n), None) 
    # Return the value at the current position.
    # This raises StopIteration if n is beyond the limits.
    # Use next(it, None) to suppress that exception.
    return next(it)

与首先将键转换为临时列表然后访问其第 n 个元素相比,这对于非常大的字典可能要快得多。

于 2020-01-14T19:11:55.013 回答