在Python中迭代字典时如何获取剩余项?

在Python中迭代字典时如何获取剩余项?,python,for-loop,Python,For Loop,我有一个简单的for循环在字典上迭代。在某个时刻,我知道它会破裂。然后如何返回剩余项目的词典 对于列表,可以这样做。字典也有类似的方法吗 example_dict = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'} def dict_loop(mydict): for i, (k, v) in enumerate(mydict.items()): try: assert (k !=3) # mimicking an err

我有一个简单的for循环在字典上迭代。在某个时刻,我知道它会破裂。然后如何返回剩余项目的词典

对于列表,可以这样做。字典也有类似的方法吗

example_dict = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}

def dict_loop(mydict):
    for i, (k, v) in enumerate(mydict.items()):
        try:
            assert (k !=3) # mimicking an error
            print(i, k, v)
        except: 
            return remaining_dictionary # if fails for key 3, should return {3:'c', 4:'d', 5:'e'}
       
dict_loop(example_dict) 

您可以在
mydict.items()上创建迭代器

这将只在原始词典上迭代一次


enumerate
不需要查找剩余项。

非常简单,
enumerate
返回一个类似于生成器的对象,您可以使用它来获取剩余项。您只需对循环进行轻微调整:

example_dict = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}
keys = list(example_dict.keys())
while len(keys) > 0:
    key = keys.pop(0)
    try:
            assert (key !=3) # mimicking an error
            print(example_dict[key])
    except: 
            return {key:example_dict[key] for key in keys}

>>> a = {'A': 1, 'B': 2, 'C': 3}
>>> en = enumerate(a.items())
>>> for i, (k, v) in en:
...     try:
...             assert i == 1
...     except:
...             print(list(en))
... 
[(1, ('B', 2)), (2, ('C', 3))]

复杂性完全由Python处理。

您可以使用枚举器的当前索引值对剩余的键进行切片,并通过字典理解构造返回dict

example_dict = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}

def dict_loop(mydict):
    for i, (k, v) in enumerate(mydict.items()):
        try:
            assert (k !=3) # mimicking an error
            print(i, k, v)
        except:
            remaining_keys = list(mydict.keys())[i:]
            return {k: mydict[k] for k in remaining_keys}

remaining_dict = dict_loop(example_dict)
print(f'remaining_dict = {remaining_dict}')
输出

0 1 a 1 2 b remaining_dict = {3: 'c', 4: 'd', 5: 'e'} 01 a 1.2 b 剩余的_dict={3:c',4:d',5:e'}
您可以记住在列表或集合中看到的内容,然后查看尚未看到的内容。我认为答案将取决于您使用的是哪个版本的Python3.x+。在某些版本中,不能保证字典中键值对的插入顺序,在另一些版本中,这是一个实现细节,在另一些版本中,这是有保证的。 0 1 a 1 2 b remaining_dict = {3: 'c', 4: 'd', 5: 'e'}