1
1

00:00:00,380  -->  00:00:02,090
<v ->Hi guys, and welcome back.</v>
2

2

00:00:02,090  -->  00:00:05,030
In this video we are going to talk about dictionaries.
3

3

00:00:05,030  -->  00:00:08,140
Dictionaries are another structure in Python,
4

4

00:00:08,140  -->  00:00:10,060
like lists, sets, and doubles,
5

5

00:00:10,060  -->  00:00:13,600
that allow us to interact with data in a certain way.
6

6

00:00:13,600  -->  00:00:15,310
And what dictionaries are for
7

7

00:00:15,310  -->  00:00:18,870
is to associate keys and values together
8

8

00:00:18,870  -->  00:00:20,510
so that if you know the key
9

9

00:00:20,510  -->  00:00:23,430
you can access the value very easily.
10

10

00:00:23,430  -->  00:00:25,190
For example, you could have a dictionary
11

11

00:00:25,190  -->  00:00:27,730
of your friend names being the keys
12

12

00:00:27,730  -->  00:00:29,880
and their ages being the values.
13

13

00:00:29,880  -->  00:00:31,730
That way if you knew the name of your friend,
14

14

00:00:31,730  -->  00:00:34,840
you can very easily get the value out, their age.
15

15

00:00:34,840  -->  00:00:35,740
Let's get started.
16

16

00:00:36,890  -->  00:00:39,530
Let's say we have a dictionary friend ages
17

17

00:00:39,530  -->  00:00:41,900
and it's equal to the curly braces,
18

18

00:00:41,900  -->  00:00:44,690
and inside it you've got your friend name, Rolf,
19

19

00:00:44,690  -->  00:00:48,300
and then a colon and then something like 24.
20

20

00:00:48,300  -->  00:00:51,010
This is a dictionary of a single element
21

21

00:00:51,010  -->  00:00:54,440
where the element is this key value pair.
22

22

00:00:54,440  -->  00:00:56,630
The pairing is done with the colon
23

23

00:00:56,630  -->  00:00:59,000
and that means that 24 is a value
24

24

00:00:59,000  -->  00:01:02,513
associated with they key, Rolf, which is a string.
25

25

00:01:03,500  -->  00:01:06,270
Keys must be strings, they can also be integers
26

26

00:01:06,270  -->  00:01:09,010
and any other hashable types.
27

27

00:01:09,010  -->  00:01:11,240
Now I know we haven't talked about hashable types yet,
28

28

00:01:11,240  -->  00:01:15,200
but for now just think of them as integers and strings.
29

29

00:01:15,200  -->  00:01:18,140
If we want multiple values in a single dictionary,
30

30

00:01:18,140  -->  00:01:21,080
you can separate the key value pairs with a comma.
31

31

00:01:21,080  -->  00:01:26,080
So we can have Adam, 30, and Anne, 27, for example.
32

32

00:01:26,360  -->  00:01:30,170
And here we have a dictionary with three values, three keys.
33

33

00:01:30,170  -->  00:01:32,370
Rolf, Adam, and Anne.
34

34

00:01:32,370  -->  00:01:35,400
And each of those keys has a value associated with them.
35

35

00:01:35,400  -->  00:01:38,914
Rolf has 24, Adam has 30, and Anne has 27.
36

36

00:01:38,914  -->  00:01:42,583
If you wanted to access one particular element,
37

37

00:01:42,583  -->  00:01:45,710
you can do friend underscore ages
38

38

00:01:45,710  -->  00:01:47,490
and then using subscript notation,
39

39

00:01:47,490  -->  00:01:49,250
access the appropriate key.
40

40

00:01:49,250  -->  00:01:51,917
So in here we would put, for example, Adam
41

41

00:01:51,917  -->  00:01:54,680
and then we would access the Adam key
42

42

00:01:54,680  -->  00:01:56,972
inside the friend ages dictionary.
43

43

00:01:56,972  -->  00:01:59,070
Remember that in lists and doubles
44

44

00:01:59,070  -->  00:02:00,450
you could use subscript notation
45

45

00:02:00,450  -->  00:02:03,960
to access a particular index such as zero, one, and two,
46

46

00:02:03,960  -->  00:02:05,680
but that won't work in dictionaries.
47

47

00:02:05,680  -->  00:02:08,278
You must access the keys themselves.
48

48

00:02:08,278  -->  00:02:10,527
Of course, if we printed this out,
49

49

00:02:10,527  -->  00:02:15,527 line:15% 
you'll see that we get 30 out, just there.
50

50

00:02:17,370  -->  00:02:21,010
If you wanted to change a particular element or add one,
51

51

00:02:21,010  -->  00:02:23,310
you can do that by doing friend ages,
52

52

00:02:23,310  -->  00:02:26,700
and then for example Bob equal 20.
53

53

00:02:26,700  -->  00:02:28,350
Then if you print friend ages,
54

54

00:02:28,350  -->  00:02:31,110 line:15% 
you'll see that Bob will have been added to the dictionary.
55

55

00:02:31,110  -->  00:02:34,620 line:15% 
So when we print it out, we've got Rolf, Adam, Anne, and Bob
56

56

00:02:34,620  -->  00:02:37,380
And if you wanna change one, just do the same thing,
57

57

00:02:37,380  -->  00:02:38,763
but with an existing key.
58

58

00:02:40,210  -->  00:02:42,890 line:15% 
And now Rolf is 20.
59

59

00:02:42,890  -->  00:02:44,650
So that is how you can add a key,
60

60

00:02:44,650  -->  00:02:46,680
just access it and set a value to it,
61

61

00:02:46,680  -->  00:02:48,303
or change an existing key.
62

62

00:02:50,000  -->  00:02:51,960
Usually when we are working with dictionaries that are used
63

63

00:02:51,960  -->  00:02:54,730
to represent multiple things in the real world,
64

64

00:02:54,730  -->  00:02:57,420
such as multiple friends or things like that,
65

65

00:02:57,420  -->  00:03:00,559
it's quite convenient to have a list of dictionaries.
66

66

00:03:00,559  -->  00:03:03,163
For example, let's make a list of our friends.
67

67

00:03:04,480  -->  00:03:06,840
Now in the past, we've had a list of friends,
68

68

00:03:06,840  -->  00:03:11,250
such as Rolf, Adam, and Anne like this,
69

69

00:03:11,250  -->  00:03:13,570
but you can actually have a list of dictionaries,
70

70

00:03:13,570  -->  00:03:16,270
each dictionary describing a friend.
71

71

00:03:16,270  -->  00:03:17,103
By the way,
72

72

00:03:17,103  -->  00:03:19,350
I'm not sure if we've looked at this split syntax for lists,
73

73

00:03:19,350  -->  00:03:21,340
but lists don't care about white space,
74

74

00:03:21,340  -->  00:03:23,130
so you can put multiple values in one line,
75

75

00:03:23,130  -->  00:03:24,880
or you can split them across several lines,
76

76

00:03:24,880  -->  00:03:25,763
however you like.
77

77

00:03:26,770  -->  00:03:29,880
Going back to our dictionary, you can, instead of Rolf,
78

78

00:03:29,880  -->  00:03:33,290
create a dictionary that contains name
79

79

00:03:33,290  -->  00:03:35,270
and Rolf associated with it,
80

80

00:03:35,270  -->  00:03:39,550
and age and 24 associated with it.
81

81

00:03:39,550  -->  00:03:41,644
Now if we do this for each of our friends,
82

82

00:03:41,644  -->  00:03:46,050
and I will do that with Adam and Anne,
83

83

00:03:46,050  -->  00:03:47,400
and their appropriate ages,
84

84

00:03:50,040  -->  00:03:52,040
That means that now what we've got
85

85

00:03:52,040  -->  00:03:53,680
is a list of dictionaries
86

86

00:03:53,680  -->  00:03:56,370
and each dictionary represent a friend.
87

87

00:03:56,370  -->  00:03:58,850
But that means that we can store more
88

88

00:03:58,850  -->  00:04:02,010
than just their name in each element.
89

89

00:04:02,010  -->  00:04:03,230
Before we were constrained
90

90

00:04:03,230  -->  00:04:05,290
to just storing their name in our list,
91

91

00:04:05,290  -->  00:04:07,703
but now we can store more data if we want.
92

92

00:04:09,750  -->  00:04:12,530
If you print friends out, you'll see that you get back
93

93

00:04:12,530  -->  00:04:15,500 line:15% 
your list of friends there.
94

94

00:04:15,500  -->  00:04:17,490
And of course if you wanted to print a particular friend,
95

95

00:04:17,490  -->  00:04:21,290
you would need to use the index, because this is a list.
96

96

00:04:21,290  -->  00:04:24,330
The friends list needs to be accessed by index
97

97

00:04:24,330  -->  00:04:26,620
so if you wanted to access index zero,
98

98

00:04:26,620  -->  00:04:28,580
that would give you back this dictionary.
99

99

00:04:28,580  -->  00:04:30,670
Index one would give you this dictionary.
100

100

00:04:30,670  -->  00:04:33,040
And index two would give you this dictionary.
101

101

00:04:33,040  -->  00:04:35,070
So let's say we want to access index one,
102

102

00:04:35,070  -->  00:04:36,820
which is this dictionary,
103

103

00:04:36,820  -->  00:04:38,080
if you print this out
104

104

00:04:38,080  -->  00:04:39,550 line:15% 
you'll see that what you get back is,
105

105

00:04:39,550  -->  00:04:41,990 line:15% 
naturally, the entire dictionary.
106

106

00:04:41,990  -->  00:04:46,360
That means that now, after friends one,
107

107

00:04:46,360  -->  00:04:50,150
you can put another subscript notation to access the name,
108

108

00:04:50,150  -->  00:04:51,570
for example.
109

109

00:04:51,570  -->  00:04:54,070 line:15% 
And doing this would give you Adam.
110

110

00:04:54,070  -->  00:04:57,300
So this is how you can access a list of dictionaries,
111

111

00:04:57,300  -->  00:05:00,540
or a particular value inside a list of dictionaries.
112

112

00:05:00,540  -->  00:05:02,220
If you had a list of lists,
113

113

00:05:02,220  -->  00:05:05,780
you would access multiple indices in succession like this.
114

114

00:05:05,780  -->  00:05:07,970
And if you had a dictionary of dictionaries,
115

115

00:05:07,970  -->  00:05:10,483
then you would access multiple keys in succession.
116

116

00:05:11,350  -->  00:05:14,030
Let me say of course that you can nest these lists
117

117

00:05:14,030  -->  00:05:17,030
and doubles and dictionaries however way you want in Python.
118

118

00:05:19,500  -->  00:05:21,220
Let's take a look at another example
119

119

00:05:21,220  -->  00:05:24,492
where we have a dictionary that maps the student names
120

120

00:05:24,492  -->  00:05:28,410
to the percentage of attendance they have to their lessons.
121

121

00:05:28,410  -->  00:05:31,140
So Rolf has attended 96% of his lessons.
122

122

00:05:31,140  -->  00:05:34,700
Bob 80% and Anne 100%.
123

123

00:05:34,700  -->  00:05:39,550
You can iterate over a dictionary, using a for loop.
124

124

00:05:39,550  -->  00:05:43,630
And what this does is it gives you the keys.
125

125

00:05:43,630  -->  00:05:45,210
So if you print this student variable
126

126

00:05:45,210  -->  00:05:46,870
that we're using here for iteration
127

127

00:05:46,870  -->  00:05:49,480 line:15% 
what you get back are the student names.
128

128

00:05:49,480  -->  00:05:51,463
The keys in your dictionary.
129

129

00:05:52,350  -->  00:05:55,883
Using that key, you can print something like this.
130

130

00:05:58,960  -->  00:06:01,780
Which will print out the student variable
131

131

00:06:01,780  -->  00:06:03,610
which is the students name
132

132

00:06:03,610  -->  00:06:06,570
and then you can access the student key
133

133

00:06:06,570  -->  00:06:08,100
in the student attendance dictionary
134

134

00:06:08,100  -->  00:06:11,400
using subscript notation to get their attendance.
135

135

00:06:11,400  -->  00:06:13,200
So if we save this and run it
136

136

00:06:13,200  -->  00:06:17,160 line:15% 
you now see that we get Rolf 96, Bob 80, Anne 100.
137

137

00:06:17,160  -->  00:06:20,291
You can of course put a percentage sign there if you like
138

138

00:06:20,291  -->  00:06:21,124
to make it a little bit nicer.
139

139

00:06:21,124  -->  00:06:23,820
However accessing a dictionary like this in a for loop
140

140

00:06:23,820  -->  00:06:27,130
doesn't look the best because there are other, better ways.
141

141

00:06:27,130  -->  00:06:32,040
The better way is if you do student attendance dot items
142

142

00:06:32,040  -->  00:06:36,467
and then here you can do for student comma attendance
143

143

00:06:36,467  -->  00:06:39,100
in student attendance dot items.
144

144

00:06:39,100  -->  00:06:41,960
And then here you no longer need to access dictionary
145

145

00:06:41,960  -->  00:06:44,940
because you've got it in the attendance variable.
146

146

00:06:44,940  -->  00:06:48,654
So what we've got here is that student attendance dot items
147

147

00:06:48,654  -->  00:06:51,610
gives you two values for each student
148

148

00:06:51,610  -->  00:06:55,590
that you can get as two separate variables here in Python.
149

149

00:06:55,590  -->  00:06:57,321
Saving and running this
150

150

00:06:57,321  -->  00:06:59,073 line:15% 
will give you exactly the same as before.
151

151

00:07:00,080  -->  00:07:02,520
You can use the in keyword in a dictionary
152

152

00:07:02,520  -->  00:07:05,530
to check whether a value is one of the keys
153

153

00:07:05,530  -->  00:07:06,363
of the dictionary.
154

154

00:07:06,363  -->  00:07:10,880
So for example, if Bob in student attendance,
155

155

00:07:10,880  -->  00:07:11,910
you can print something like
156

156

00:07:11,910  -->  00:07:14,733
Bob attended this many lectures.
157

157

00:07:16,450  -->  00:07:17,760
Otherwise, you can print that
158

158

00:07:17,760  -->  00:07:21,363
Bob is not a student in this class.
159

159

00:07:23,140  -->  00:07:25,450
So, the in keyword allows you to check
160

160

00:07:25,450  -->  00:07:27,820
whether a value is one of the keys.
161

161

00:07:27,820  -->  00:07:30,640
Notice that you can't check whether one of the values
162

162

00:07:30,640  -->  00:07:33,903
is in the dictionary, you can only check the keys.
163

163

00:07:35,110  -->  00:07:38,850
Finally, you can also get just the values back if you like.
164

164

00:07:38,850  -->  00:07:41,210
If you wanted 96, 80, and 100
165

165

00:07:41,210  -->  00:07:43,050
without worrying about the keys,
166

166

00:07:43,050  -->  00:07:46,030
for example if wanted to calculate an average,
167

167

00:07:46,030  -->  00:07:49,010
you could have a variable called attendance values
168

168

00:07:49,010  -->  00:07:53,080
and make it equal to student attendance dot values.
169

169

00:07:53,080  -->  00:07:56,042
And then you can print the sum of attendance values
170

170

00:07:56,042  -->  00:08:01,042
divided by the length of attendance values.
171

171

00:08:01,210  -->  00:08:02,700
And what this is going to give you is
172

172

00:08:02,700  -->  00:08:07,200
add 96, 80, and 100 together and divide by three
173

173

00:08:07,200  -->  00:08:10,860
which is the length of what you get back which is a list.
174

174

00:08:10,860  -->  00:08:13,493 line:15% 
So if you run that you get back 92.0.
175

175

00:08:15,050  -->  00:08:17,350
Going back to what we had earlier,
176

176

00:08:17,350  -->  00:08:20,940
which is this syntax where you have two variables
177

177

00:08:20,940  -->  00:08:23,860
being defined, separated by a comma inside a for loop,
178

178

00:08:23,860  -->  00:08:26,150
we're going to learn more about that in the next video.
179

179

00:08:26,150  -->  00:08:28,370
So if that's unclear, don't worry about it,
180

180

00:08:28,370  -->  00:08:29,570
we'll look at it just now.
181

181

00:08:29,570  -->  00:08:31,153
I'll see you in the next video.
