Dictionary
in Python
Dictionary is one of the data type in python.
It is mapping between key and values. The
association of a key and a value is called a key-
value pair or sometimes an item.
Lists are ordered set of objects, whereas dictionaries
are unordered sets.
Items in dictionaries are accessed via keys and not
via their position.
Syntax of dictionary:
{key1:value1, key2:value2,...}
Example:
{1:’abc’,2:’xyz’}
Empty dictionary is denoted by { }.
Keys are unique within a dictionary while values
may not be. The values of a dictionary can be of
any type, but the keys must be immutable.
The function dict creates a new dictionary with no items.
Because dict is the name of a built-in function, you
should avoid using it as a variable name.
Ex:
a = dict()
print(a)
Output:
{}
a = {}
print(a)
Ex:
a = dict()
print(dict)
Output:
<type 'dict'>
Adding & Accessing items
To add items to the dictionary, you can use
square brackets:
Ex:
a=dict()
a[1] = ‘abc‘
print(a)
Output:
{1: 'abc'}
Ex:
a=dict()
a[‘a’] = ‘abc‘
a['b'] = 'pqr'
print(a)
print(a[‘b’])
Output:
{'a': 'abc', 'b': 'pqr'}
pqr
Ex:
a=dict()
a[b] = 'abc‘
print(a)
Output:
NameError: name 'b' is not defined
Ex:
dict={1:'Name',2:'xyz',2:'abc'}
print(dict)
print(dict[1])
print(dict[2])
Output:
{1: 'Name', 2: 'abc'}
Name
abc
Attempting to access a data item with a key, which is
not part of dictionary will result in error.
Ex:
a = {'a':'abc','b':'pqr'}
print(a)
print(a['a’])
print(a[‘c’])
Output:
{'a': 'abc', 'b': 'pqr'}
abc
KeyError: 'c'
Updating dictionary
(1) By adding new items/modifying existing
entry:
Ex:
a = {'a': 'abc', 'b': 'pqr'}
a[‘a’]=‘zxc’
a['c']=8
print(a)
Output:
{'a': 'zxc', 'b': 'pqr', 'c': 8}
(2) Removing dictionary:
Ex:
a={1:'abc', 2:'pqr'}
del a[1]
print(a)
del a[2]
print(a)
a[1]='abc'
print(a)
a.clear()
print(a)
del a
print(a)
Output:
{2: 'pqr'}
{}
{1: 'abc'}
{}
NameError: name 'a' is not defined
Built-in dictionary functions
1. cmp(dict1, dict2)
cmp() compares two dictionaries based
on key and values.
Syntax:
cmp(dict1, dict2)
This method returns 0 if both dictionaries
are equal, -1 if dict1 < dict2 and 1 if dict1
> dic2.
Ex:
dict1 = {'Name': 'abc', 'Age': 7}
dict2 = {'Name': 'abc', 'Age': 7}
dict3 = {'Name': 'abc', 'Age': 27}
dict4 = {'Name': 'AAc', 'Age': 7}
dict5 = {'Name': 'ABc', 'Age': 7}
dict6 = {'Name': 'abc', 'Age': 31}
dict7 = {'Name': 'pqr'}
print "Return Value : %d" % cmp (dict1, dict2)
#print cmp(dict1, dict2)
print "Return Value : %d" % cmp (dict2, dict3)
print "Return Value : %d" % cmp (dict1, dict4)
print "Return Value : %d" % cmp (dict4, dict5)
print "Return Value : %d" % cmp (dict4, dict6)
print "Return Value : %d" % cmp (dict1, dict7)
Output:
Return Value : 0
Return Value : -1
Return Value : 1
Return Value : -1
Return Value : -1
Return Value : 1
Python 3: cmp does not exist
Ex:
if dict1==dict2:
print(“True”)
2. len(dict)
Gives the total length of the dictionary. This would
be equal to the number of items in the dictionary.
Syntax:
len(dict)
Ex:
dict = {'Name': 'Zara', 'Age': 7}
print("Length : “, len(dict))
dict1 = {}
print("Length : “, len(dict1))
Output:
Length : 2
Length : 0
3. str(dict)
Produces a printable string representation of a
dictionary.
Syntax:
str(dict)
Ex:
dict = {'Name': 'Zara', 'Age': 7}
print("Equivalent String : “, str (dict))
print(dict)
Output:
Equivalent String : {'Age': 7, 'Name': 'Zara'}
{'Age': 7, 'Name': 'Zara'}
4. type(variable)
Returns the type of the passed variable. If passed
variable is dictionary, then it would return a
dictionary type.
Syntax:
type(dict)
Ex:
dict = {'Name': 'Zara', 'Age': 7}
print("Variable Type : “, type (dict))
Output:
Variable Type : <class 'dict'>
Built-in dictionary methods
1. dict.clear()
Removes all elements of dictionary dict.
Syntax:
dict.clear()
Ex:
dict = {'Name': 'Zara', 'Age': 7}
print("Start Len : “, len(dict))
dict.clear()
print("End Len : “, len(dict))
Output:
Start Len : 2
End Len : 0
2. dict.copy()
Returns a copy of dictionary dict
Syntax:
dict.copy()
Ex:
dict1 = {'Name': 'Zara', 'Age': 7};
dict2 = dict1.copy()
print("New Dictionary : “, str(dict2))
Output:
New Dictionary : {'Age': 7, 'Name': 'Zara'}
3. dict.fromkeys()
Create a new dictionary with keys from seq and
values set to value.
Syntax:
dict.fromkeys(seq[, value])
seq -- This is the list of values which would be used
for dictionary keys preparation.
value -- This is optional, if provided then value would
be set to this value.
Ex:
seq = ('name', 'age')
dict = dict.fromkeys(seq)
print("New Dictionary : “, str(dict))
dict = dict.fromkeys(seq, 10)
print("New Dictionary : “, str(dict))
Output:
New Dictionary : {'name': None, 'age': None}
New Dictionary : {'name': 10, 'age': 10}
# vowels keys
keys = {'a', 'e', 'i', 'o', 'u' }
value = [1]
vowels = dict.fromkeys(keys, value)
print(vowels)
# updating the value
value.append(2)
print(vowels)
Output:
{'a': [1], 'u': [1], 'o': [1], 'e': [1], 'i': [1]}
{'a': [1, 2], 'u': [1, 2], 'o': [1, 2], 'e': [1, 2], 'i': [1,
2]}
4. dict.get(key, default=None)
Returns a value for the given key. If key is not
available then returns default value None.
Syntax:
dict.get(key, default=None)
key -- This is the Key to be searched in the
dictionary.
default -- This is the Value to be returned in case key
does not exist.
Ex:
dict = {'Name': 'Zabra', 'Age': 7}
print("Value : " , dict.get('Age’))
print("Value : “, dict.get('Education', ‘Never’))
print("Value : “, dict.get('Gender’))
print(dict)
Output:
Value : 7
Value : Never
Value : None
{'Age': 7, 'Name': 'Zabra'}
5. dict.has_key(key)
Returns true if key is in dictionary dict, false
otherwise
Syntax:
dict.has_key(key)
Ex:
dict = {'Name': 'Zara', 'Age': 7}
print(“Answer : “, dict.has_key('Age’))
print(" Answer : “, dict.has_key('Education’))
Output:
Answer : True
Answer : False
Python 3: has_key does not exist.
dict1 = {'Name': 'Zara', 'Age': 7}
if 'Age' in dict1:
print(‘True’)
6. dict.items()
Returns a list of dict's (key, value) tuple pairs
Syntax:
dict.items()
Ex:
dict = {'Name': 'Zara', 'Age': 7}
print(“Answer : “, list(dict.items()))
Output:
Answer : [('Name', 'Zara'), ('Age', 7)]
7. dict.keys()
Returns list of dictionary dict's keys
Syntax:
dict.keys()
Ex:
dict = {'Name': 'Zara', 'Age': 7}
dict1 = {}
print(“Key : “, dict.keys())
print("Value : “, dict1.keys())
Output:
Key : ['Age', 'Name']
Value : []
8. dict.setdefault(key, default=None)
Similar to get(), but will set dict[key]=default
if key is not already in dict
Syntax:
dict.setdefault(key, default=None)
Ex:
dict = {'Name': 'Zara', 'Age': 7}
print("Value : ", dict.setdefault('Age', None))
print("Value : “, dict.setdefault('Education', 'Never’))
print("Value : ", dict.setdefault('Gender’))
print(dict)
Output:
Value : 7
Value : Never
Value : None
{'Name': 'Zara', 'Age’: 7, 'Education’: 'Never’, 'Gender’:
None}
Difference between get() and
setdefault() methods:
data = {}
x = data.get('key',10)
print(x) #Output:10
print(data) #Output: {}
data = {}
x = data.setdefault('key',10)
print(x) #Output:10
print(data) #Output: {'key': 10}
9. dict.update(dict2)
Adds dictionary dict2's key-values pairs to dict. This
function does not return anything.
Syntax:
dict.update(dict2)
Ex:
dict = {'Name': 'Zara', 'Age': 7}
dict2 = {'Gender': 'female' }
dict.update(dict2)
print("Value : “, dict)
print(dict2)
Output:
Value : {'Name': 'Zara', 'Age': 7, 'Gender': 'female'}
{'Gender': 'female'}
10. dict.values()
Returns list of dictionary dict's values
Syntax:
dict.values()
Ex:
dict = {'Name': 'Zara', 'Age': 7}
dict2 = {}
print("Value : “, dict.values())
print("Value : “, dict2.values())
Output:
Value : [7, 'Zara']
Value : []
Ex:
a = {1: 'abc', 2: 'pqr', 3: 'xyz'}
print(1 in a)
print(4 in a)
val = a.values()
print('pqr' in val)
Output:
True
False
True
11. pop(), popitem()
dict = {'Name': 'Zara', 'Age': 7}
print(min(dict))
print(max(dict))
print(dict.pop('Name'))
print(dict)
print(dict.pop('Age'))
print(dict)
dict['N']='Zara'
dict['A']=7
print(dict)
print(dict.popitem())
print(dict)
Output:
Age
Name
Zara
{'Age': 7}
7
{}
{'N': 'Zara', 'A': 7}
('A', 7)
{'N': 'Zara'}
Looping and dictionaries
Problem: You are given a string and you want to
count how many times each letter appears.
The for loop traverses the string. Each time through
the loop, if the character c is not in the dictionary,
we create a new item with key c and the initial
value 1 (since we have seen this letter once). If c is
already in the dictionary we increment d[c].
Ex:
word = 'brontosaurus'
d = dict()
for c in word:
if c not in d:
d[c] = 1
else:
d[c] = d[c] + 1
print(d)
Output:
{'a': 1, 'b': 1, 'o': 2, 'n': 1, 's': 2, 'r': 2, 'u': 2, 't': 1}
We can use get to write our loop more concisely.
Because the get method automatically handles the
case where a key is not in a dictionary, we can
reduce four lines down to one and eliminate the if
statement.
word = 'brontosaurus'
d = dict()
for c in word:
d[c] = d.get(c,0) + 1
print(d)
If you use a dictionary as the sequence in a for
statement, it traverses the keys of the dictionary. This
loop prints each key and the corresponding value.
Ex:
counts = { 1:'abc',2:'pqr',3:'xyz'}
for key in counts:
print(key, counts[key])
Output:
1 abc
2 pqr
3 xyz
Problem:
Find all the entries in a dictionary with a value above
ten.
d = { ‘abc' : 1 , ‘pqr' : 42, ‘xyz': 100}
for i in d:
if d[i] > 10 :
print(i, d[i])
Output:
pqr 42
xyz 100
Problem:
Print keys in alphabetical order.
d = {'chuck' : 1 , 'annie' : 42, 'jan': 100}
lst = list(d.keys()) # lst = list(d)
print(lst)
l = sorted(lst)
for i in l:
print(i, d[i])
Output:
['chuck', 'annie', 'jan']
annie 42
chuck 1
jan 100
With a given integral number n, write a
program to generate a dictionary that
contains (i, i*i). Suppose the following
input is supplied to the program:
8
Then, the output should be:
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}
Solution:
n=int(input())
d=dict()
for i in range(1,n+1):
d[i]=i*i
print(d)