在Python中迭代字典时如何获取剩余项?
我有一个简单的for循环在字典上迭代。在某个时刻,我知道它会破裂。然后如何返回剩余项目的词典 对于列表,可以这样做。字典也有类似的方法吗在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
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'}