F. *_*. A 2 python dictionary iterator python-3.8
我正在尝试找到一种方法来获取 Python 3.6+ 的下一个密钥(已排序)
例如:
dict = {'one':'value 1','two':'value 2','three':'value 3'}
Run Code Online (Sandbox Code Playgroud)
我想要实现的是返回下一个键的功能。就像是:
next_key(dict, current_key='two') # -> should return 'three'
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所拥有的:
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
Run Code Online (Sandbox Code Playgroud)
好吧,这就是基本思想,我想我已经很接近了,但是这段代码给出了 StopIteration 错误。请帮忙。
谢谢你!
迭代器方式...
def next_key(dict, key):
keys = iter(dict)
key in keys
return next(keys, False)
Run Code Online (Sandbox Code Playgroud)
演示:
>>> next_key(dict, 'two')
'three'
>>> next_key(dict, 'three')
False
>>> next_key(dict, 'four')
False
Run Code Online (Sandbox Code Playgroud)
循环while k := next(key_iter)无法正确停止\xe2\x80\x99。手动迭代iter可以通过捕获来完成StopIteration:
iterator = iter(some_iterable)\n\nwhile True:\n try:\n value = next(iterator)\n except StopIteration:\n # no more items\nRun Code Online (Sandbox Code Playgroud)\n\n或者通过传递默认值next并让它捕获StopIteration您,然后检查该默认值(但您需要选择一个不会出现在可迭代中的默认值\xe2\x80\x99!):
iterator = iter(some_iterable)\n\nwhile True:\n try:\n value = next(iterator)\n except StopIteration:\n # no more items\nRun Code Online (Sandbox Code Playgroud)\n\n但迭代器本身是可迭代的,因此您可以跳过所有这些并使用普通的 ol\xe2\x80\x99 for 循环:
\n\niterator = iter(some_iterable)\n\nwhile (value := next(iterator, None)) is not None:\n # \xe2\x80\xa6\n\n# no more items\nRun Code Online (Sandbox Code Playgroud)\n\n这翻译成你的例子是:
\n\niterator = iter(some_iterable)\n\nfor value in iterator:\n # \xe2\x80\xa6\n\n# no more items\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3885 次 |
| 最近记录: |