Title: COSC 1306 COMPUTER SCIENCE AND PROGRAMMING
1COSC 1306COMPUTER SCIENCE AND PROGRAMMING
- Jehan-François Pâris
- jfparis_at_uh.edu
2CHAPTER VIIDICTIONARIES, TUPLES AND SETS
3DICTIONARIES
VERY USEFUL
4Dictionaries (I)
- Store pairs of entries called items 'CS'
'743-713-3350', 'UHPD' '713-743-3333' - Each pair of entries contains
- A key
- A value
- Key and values are separated by a colon
- Pairs of entries are separated by commas
- Dictionary is enclosed within curly braces
5Usage
- Keys must be unique within a dictionary
- No duplicates
- If we have age 'Alice' 25, 'Bob'
28then age'Alice' is 25and ageBob' is
28
6Dictionaries are mutable
- gtgtgt age 'Alice' 25, 'Bob' 28
- gtgtgt saved age
- gtgtgt age'Bob' 29
- gtgtgt age'Bob' 29, 'Alice' 25
- gtgtgt saved'Bob' 29, 'Alice' 25
7Keys must be unique
- gtgtgt age 'Alice' 25, 'Bob' 28, 'Alice'
26 - gtgtgt age'Bob' 28, 'Alice' 26
8Displaying contents
- gtgtgt age 'Alice' 25, 'Carol' 'twenty-two'
- gtgtgt age.items()dict_items( ('Alice', 25),
('Carol', 'twenty-two')) - gtgtgt age.keys()dict_keys( 'Alice', 'Carol')
- age.values()dict_values(25, 'twenty-two')
9Updating directories
- gtgtgt age 'Alice' 26 , 'Carol' 22
- gtgtgt age.update('Bob' 29)
- gtgtgt age'Bob' 29, 'Carol' 22, 'Alice' 26
- gtgtgt age.update('Carol' 23)
- gtgtgt age'Bob' 29, 'Carol' 23, 'Alice' 26
10Returning a value
- gtgtgt age 'Bob' 29, 'Carol' 23, 'Alice' 26
- gtgtgt age.get('Bob')29
- gtgtgt age'Bob'29
11Removing a specific item (I)
- gtgtgt a 'Alice' 26, 'Carol' 'twenty-two'
- gtgtgt a'Carol' 'twenty-two', 'Alice' 26
- gtgtgt a.pop('Carol)'twenty-two'
- gtgtgt a'Alice' 26
12Removing a specific item (II)
- gtgtgt a.pop('Alice')26
- gtgtgt a
- gtgtgt
13Remove a random item
- gtgtgt age 'Bob' 29, 'Carol' 23, 'Alice' 26
- gtgtgt age.popitem()('Bob', 29)
- gtgtgt age
- 'Carol' 23, 'Alice' 26
- gtgtgt age.popitem()('Carol', 23)
- gtgtgt age'Alice' 26
14TUPLES
NOT COVERED
15Tuples
- Same as lists but
- Immutable
- Enclosed in parentheses
- A tuple with a single element must have a comma
inside the parentheses - a (11,)
16Examples
- gtgtgt mytuple (11, 22, 33)
- gtgtgt mytuple011
- gtgtgt mytuple-133
- gtgtgt mytuple01(11,)
- The comma is required!
17Why?
- No confusion possible between 11 and 11
- (11) is a perfectly acceptable expression
- (11) without the comma is the integer 11
- (11, ) with the comma is a list containing the
integer 11 - Sole dirty trick played on us by tuples!
18Tuples are immutable
- gtgtgt mytuple (11, 22, 33)
- gtgtgt saved mytuple
- gtgtgt mytuple (44,)
- gtgtgt mytuple(11, 22, 33, 44)
- gtgtgt saved(11, 22, 33)
19Things that do not work
- mytuple 55Traceback (most recent call
last)ZTypeError can only concatenate tuple
(not "int") to tuple - Can understand that!
20Sorting tuples
- gtgtgt atuple (33, 22, 11)
- gtgtgt atuple.sort()Traceback (most recent call
last)AttributeError'tuple' object has no
attribute 'sort' - gtgtgt atuple sorted(atuple)
- gtgtgt atuple11, 22, 33
Tuples are immutable!
sorted( ) returns a list!
21Most other things work!
- gtgtgt atuple (11, 22, 33)
- gtgtgt len(atuple)3
- gtgtgt 44 in atupleFalse
- gtgtgt i for i for i in atuple11, 22, 33
22The reverse does not work
- gtgtgt alist 11, 22, 33
- gtgtgt (i for i in alist)ltgenerator object
ltgenexprgt at 0x02855DA0gt - Does not work!
23Converting sequences into tuples
- gtgtgt alist 11, 22, 33
- gtgtgt atuple tuple(alist)
- gtgtgt atuple(11, 22, 33)
- gtgtgt newtuple tuple('Hello World!')
- gtgtgt newtuple('H', 'e', 'l', 'l', 'o', ' ', 'W',
'o', 'r', 'l', 'd', '!')
24SETS
NOT COVERED A SPECIALIZED TOOL
25Sets
- Indentified by curly braces
- 'Alice', 'Bob', 'Carol'
- 'Dean' is a singleton
- Can only contain unique elements
- Duplicates are eliminated
- Immutable like tuples and strings
26Sets do not contain duplicates
- gtgtgt cset 11, 11, 22
- gtgtgt cset11, 22
27Sets are immutable
- gtgtgt aset 11, 22, 33
- gtgtgt bset aset
- gtgtgt aset aset 55
- gtgtgt aset33, 11, 22, 55
- gtgtgt bset33, 11, 22
Union of two sets
28Sets have no order
- gtgtgt 1, 2, 3, 4, 5, 6, 71, 2, 3, 4, 5, 6, 7
- gtgtgt 11, 22, 3333, 11, 22
29Sets do not support indexing
- gtgtgt myset 'Apples', 'Bananas', 'Oranges'
- gtgtgt myset'Bananas', 'Oranges', 'Apples'
- gtgtgt myset0Traceback (most recent call last)
File "ltpyshell2gt", line 1, in ltmodulegt
myset0TypeError 'set' object does not support
indexing
30Examples
- gtgtgt alist 11, 22, 33, 22, 44
- gtgtgt aset set(alist)
- gtgtgt aset33, 11, 44, 22
- gtgtgt aset aset 55SyntaxError invalid syntax
31Boolean operations on sets (I)
- Union of two sets
- Contains all elements that are in set A or in set
B
A
B
32Boolean operations on sets (II)
- Intersection of two sets
- Contains all elements that are in both sets A and
B
A
B
33Boolean operations on sets (III)
- Difference of two sets
- Contains all elements that are in A but not in B
A
B
34Boolean operations on sets (IV)
- Symmetric difference of two sets
- Contains all elements that are either
- in set A but not in set B or
- in set B but not in set A
A
B
35Boolean operations on sets (V)
- gtgtgt aset 11, 22, 33
- gtgtgt bset 12, 23, 33
- Union of two sets
- gtgtgt aset bset 33, 22, 23, 11, 12
- Intersection of two sets
- gtgtgt aset bset33
36Boolean operations on sets (VI)
- gtgtgt aset 11, 22, 33
- gtgtgt bset 12, 23, 33
- Difference
- gtgtgt aset bset11, 22
- Symmetric difference
- gtgtgt aset bset11, 12, 22, 23
37Summary
- Strings, lists, tuples, sets and dictionaries all
deal with aggregates - Two big differences
- Lists and dictionaries are mutable
- Unlike strings, tuples and sets
- Strings, lists and tuples are ordered
- Unlike sets and dictionaries
38Mutable aggregates
- Can modify individual items
- x 11, 22, 33x0 44will work
- Cannot save current value
- x 11,22, 33y xwill not work
39Immutable aggregates
- Cannot modify individual items
- s 'hello!'s0 'H'is an ERROR
- Can save current value
- s 'hello!'t swill work
40Ordered aggregates
- Entities in the collection can be accessed
through a numerical index - s 'Hello!'s0
- x 'Alice', 'Bob', 'Carol'x-1
- t (11, 22)t1
41Other aggregates
- Cannot index sets
- myset 'Apples', 'Bananas', 'Oranges'
myset0 is WRONG - Can only index dictionaries through their keys
- age 'Bob' 29, 'Carol' 23, 'Alice'
26age'Alice' worksage0 is WRONG