#Two ways to do the same thing: i = 0 i = int() #no arguments
Without the yellow code, the first execution of the statement
d[person] += 1
would raise the
KeyError
exception because
d
does not have the key
"Derek"
.
""" Count how many times each person appears. """ import sys people = ("Derek", "Dave", "Derek", "Don", "Dean", "Dan", "Derek", "Dan", "Dave") d = {} #Create an empty dict for person in people: if person not in d: d[person] = int() #or d[person] = 0 d[person] += 1 #means d[person] = d[person] + 1 for person in sorted(d): #alphabetical order print(f"{person:5} {d[person]}") sys.exit(0)
Dan 2 Dave 2 Dean 1 Derek 3 Don 1
During the first iteration of the first
for
loop,
the variable
person
contains
"Derek"
and we add 1 to the 0 in
d["Derek"]
.
Where did this 0 come from?
It was created by the
int
function passed as an argument to the
collections.defaultdict
function.
""" Count how many times each person appears. """ import sys import collections people = ("Derek", "Dave", "Derek", "Don", "Dean", "Dan", "Derek", "Dan", "Dave") d = collections.defaultdict(int) #Create an empty collections.defaultdict for person in people: d[person] += 1 for person in sorted(d): #alphabetical order print(f"{person:5} {d[person]}") sys.exit(0)
Dan 2 Dave 2 Dean 1 Derek 3 Don 1
Later, we’ll have an even easier way to do this with a
collections.Counter
.
#Two ways to do the same thing: list1 = [] list2 = list()
In the
dict
ionary
d
,
each key is a
str
ing
naming a day of the week,
and each value is a
list
of people.
""" List the appointments for each day of the week. """ import sys appointments = ( #a tuple of 8 tuples ("Monday", "John"), ("Wednesday", "Dan"), ("Sunday", "Jane"), ("Tuesday", "John"), ("Thursday", "Mary"), ("Wednesday", "Bob"), ("Wednesday", "Bill"), ("Sunday", "Jim") ) d = {} #Create an empty dict for appointment in appointments: day = appointment[0] name = appointment[1] if day not in d: d[day] = list() #or d[day] = [] d[day].append(name) days = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") for day in sorted(d, key = lambda day: days.index(day)): names = sorted(d[day]) print(f'{day + ":":10} {", ".join(names)}') sys.exit(0)
Sunday: Jane, Jim Monday: John Tuesday: John Wednesday: Bill, Bob, Dan Thursday: Mary
In the
collections.defaultdict
d
,
each key is a
str
ing
naming a day of the week,
and each value is a
list
of people.
During the first iteration of the first
for
loop,
the variable
day
contains
"Monday"
and we
append
the
str
ing
"John"
to the empty
list
d["Monday"]
.
Where did this empty
list
come from?
It was created by the
list
function passed as an argument to the
collections.defaultdict
function.
""" List the appointments for each day of the week. """ import sys import collections appointments = ( #a tuple of 8 tuples ("Monday", "John"), ("Wednesday", "Dan"), ("Sunday", "Jane"), ("Tuesday", "John"), ("Thursday", "Mary"), ("Wednesday", "Bob"), ("Wednesday", "Bill"), ("Sunday", "Jim") ) d = collections.defaultdict(list) #Create an empty collections.defaultdict for appointment in appointments: day = appointment[0] name = appointment[1] d[day].append(name) #d[day] is a list days = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") for day in sorted(d, key = lambda day: days.index(day)): names = sorted(d[day]) print(f'{day + ":":10} {", ".join(names)}') sys.exit(0)
Sunday: Jane, Jim Monday: John Tuesday: John Wednesday: Bill, Bob, Dan Thursday: Mary