Consider the following
abc = ["a", "b", "c", "d", "e"]
for x in abc:
print(x)
Output
a
b
c
d
e
["a", "b", "c", "d", "e"]
is type of sequence called list
. abc
is assigned to the list.
The ordering of sequences starts at index 0 from the left.That is, "a"
is at index 0.
for
means for each element in the sequence. That is, the for
loop will access each element of the sequence - in this example, the sequence is a list
["a", "b", "c", "d", "e"]
.
for
each element x
in the sequence ["a", "b", "c", "d", "e"]
- Begins at
index = 0
, such that x = abc[0] = "a"
- print each element
x
such that x = abc[index]
(but we do not need to the indexing)
-
for
loop indirectly increment the index
by 1.
Suppose content_rating = [ [...], [...], [...]]
= list of list
for row in content_rating
for
each element row
in the sequence content_rating
.
Here row
can be label as anything we want (Example, for x in content_rating
but x
is not meaningful as row
.) However, we want to make the code readable. row
informs the user that row
contains the row data that is represent by a sequence list
.
This is because content_rating
is 2-dimensional list
.
For illustration purpose (and not Python code):
-
content_rating = [ [...], [...], [...]]
= list of list
-
row
= sequence list
= [...]
In your example, content_rating
is a dictionary
content_rating
is a dictionary {'4+': 4433, '12+': 1155, '9+': 987, '17+': 622}
. And, for row in content_rating
is not the appropriate way to iterate a dictionary.
for row in content_rating
means for
each element row
of dictionary content_rating
key values ['4+', '12+', '9+', '17+']
. content_rating[row]
access the value for particular key in the dictionary.
Label row
for each element makes the code not as readable since there is no row but we actually meant key.
Edit code in your example
Use the following instead
for k, v in content_rating.items():
.items()
converts into a sequence list
of tuple
(key, value)
pair . That is, .items()
= [(key1, value1), ...., (keyn, valuen)]
k, v
gets assign to each element (key, value)
where k
means key of the dictionary
and, where v
means value of the dictionary
And replace
content_ratings[row]
with
v
You can simplified the code by using a dictionary comprehension
c_ratings_proportions = { k: v/total_number_of_apps for k, v in content_ratings.items()}
.items()
converts into a sequence list
of tuple
(key, value)
pair . That is, .items()
= [(key1, value1), ...., (keyn, valuen)]
k, v
gets assign to each element (key, value)
where k
means key of the dictionary
and, where v
means value of the dictionary
Reads mathematically as
dictionary[key] = value / total_number_of_apps, for each element (key, value) in dictionary content_ratings
Other questions on data structures
Dictionary {
}
are not sequences.
- Uses key to access the value
- When using a
for
loop to iterate dictionary values, use .items()
to convert into a sequence list
of tuple
(key, value)
for for
loop iterating each element.
Sequence, for example list
[
]
, or tuple
( , )
(tuples can contains 1 or more elements separated by a comma ,
)
- Uses index to access elements in the sequences
- Sequences start index at 0.
There are different types of data structures. Read up on data structures in Python Tutorial.
You need to read up on Dictionary. Here’s the dictionary section in Python Tutorial.