首页 > 解决方案 > 返回给定字典键的下一个键,python 3.6+

问题描述

我正在尝试找到一种方法来获取 Python 3.6+ 的下一个键(已订购)

例如:

dict = {'one':'value 1','two':'value 2','three':'value 3'}

我想要实现的是返回下一个键的功能。就像是:

next_key(dict, current_key='two')   # -> should return 'three' 

这是我到目前为止所拥有的:

def next_key(dict,key):
    key_iter = iter(dict)  # create iterator with keys
    while k := next(key_iter):    #(not sure if this is a valid way to iterate over an iterator)
        if k == key:   
            #key found! return next key
            try:    #added this to handle when key is the last key of the list
                return(next(key_iter))
            except:
                return False
    return False

好吧,这是基本思想,我想我很接近,但是这段代码给出了 StopIteration 错误。请帮忙。

谢谢!

标签: pythondictionaryiteratorpython-3.8

解决方案


循环while k := next(key_iter)没有正确停止。手动迭代iter是通过捕获来完成的StopIteration

iterator = iter(some_iterable)

while True:
    try:
        value = next(iterator)
    except StopIteration:
        # no more items

或者通过将默认值传递给next并让它StopIteration为您捕获,然后检查该默认值(但您需要选择一个不会出现在您的可迭代对象中的默认值!):

iterator = iter(some_iterable)

while (value := next(iterator, None)) is not None:
    # …

# no more items

但是迭代器本身是可迭代的,因此您可以跳过所有这些并使用普通的 ol' for 循环:

iterator = iter(some_iterable)

for value in iterator:
    # …

# no more items

这转化为您的示例:

def next_key(d, key):
    key_iter = iter(d)

    for k in key_iter:
        if k == key:
            return next(key_iter, None)

    return None

推荐阅读