.items()
will return a view
object. This object contains a dynamic view of all your key-value pairs in the dictionary as tuples, updating as the dictionary updates. The for
loop then calls the iter
function on the view, which returns an iterator
. The iterator
represents all your key-value pairs as a stream of data. Again, behind the scenes, the for
loop will grab each successive key-value pair using the __next__()
method. The __next__()
method returns a tuple with your key and value. Finally, you use tuple unpacking to split this tuple into 2 different variables. Here is a bit what this code would look like behind the scenes without a for-loop.
contact_emails = {
'Sue Reyn': 's.reyn@email.com',
'Mike Filt': 'mike.filt@bmail.com',
'Nate Arty': 'narty042@nmail.com'
}
# you can modify your dict if you want here
# get our view of the dict
items = contact_emails.items()
# we get our stream of key-value pairs
# the for loop will do this in the background
item_iterator = iter(items)
try:
# we use while True because we use an error to exit the loop
while True:
# we call __next__() on the iterator to get our next pair
kv_pair = item_iterator.__next__()
# we assign iteration variables here
# this special syntax is called "tuple unpacking"
# It lets us split a pair of data into 2 variables easily.
k, v = kv_pair
# this is what would be the body of the for-loop
print(v, "is", k)
# ...
# the __next__() raises an exception to break out of the while loop.
# it can't use the break keyword because it is inside a method and doesn't know about the while loop
except StopIteration:
# we've accomplished our goal of leaving the while loop
# we can just ignore the error and continue moving on
pass
This syntax is kind of bulky, so python will instead just perform all the magic for us inside the for-loop construct.
Here's some further reading you can do about iterators, exceptions, tuple unpacking, and for loops.
Python iter() method - GeeksForGeeks
Iterables - Python Like You Mean It
__next__ in generators and iterators and what is a method-wrapper? - StackOverflow
Are exceptions for flow control best practice in Python? - Software Engineering StackExchange
Unpacking a Tuple in Python - GeeksForGeeks
Loop Better: a deeper look at iteration in Python - Trey Hunner