7.2. Dictionary Exercises#
7.2.1. Exercise 1#
Load people.tsv into a dictionary. Prompt user for filename
Show code cell source
# filename = input('What is the name of the file? ')
filename = 'people.tsv'
header = None
data_array = []
with open(filename, 'r') as fp:
for line in fp:
if header is None:
header = line.strip().split('\t')
continue
data_array.append(dict(zip(header, line.strip().split('\t'))))
from pprint import pprint
pprint(data_array)
[{'account': 'QVJP6465242365388',
'country': 'Nepal',
'email': 'xdunn@hotmail.com',
'first_name': 'Michael',
'last_name': 'Weaver'},
{'account': 'FVQZ0955529767455',
'country': 'Kazakhstan',
'email': 'iedwards@yahoo.com',
'first_name': 'Jackson',
'last_name': 'Owens'},
{'account': 'QFIM0905182880347',
'country': 'Mauritius',
'email': 'arogers@smith.com',
'first_name': 'Patrick',
'last_name': 'Gilmore'},
{'account': 'YWOT0997131632248',
'country': 'New Zealand',
'email': 'plewis@chavez.com',
'first_name': 'Jeffrey',
'last_name': 'Perez'},
{'account': 'QAAE9838291982555',
'country': 'Yemen',
'email': 'fred92@yahoo.com',
'first_name': 'James',
'last_name': 'Thomas'},
{'account': 'PCNE8127696280157',
'country': 'Jordan',
'email': 'mmiller@lynch.com',
'first_name': 'Greg',
'last_name': 'Nelson'},
{'account': 'BCEN3299883381338',
'country': 'Palau',
'email': 'steven49@gmail.com',
'first_name': 'Joshua',
'last_name': 'White'},
{'account': 'XPTQ7837014557677',
'country': 'Argentina',
'email': 'amanda23@hotmail.com',
'first_name': 'Todd',
'last_name': 'Francis'},
{'account': 'TRLQ6559557081716',
'country': 'Marshall Islands',
'email': 'jackduke@hotmail.com',
'first_name': 'Stephen',
'last_name': 'Shaw'},
{'account': 'OHOV7518558201999',
'country': 'Albania',
'email': 'rhodesnicholas@hotmail.com',
'first_name': 'Mariah',
'last_name': 'Armstrong'},
{'account': 'MCQU7347833033110',
'country': 'Kyrgyz Republic',
'email': 'smithashlee@yahoo.com',
'first_name': 'Anthony',
'last_name': 'Boyle'},
{'account': 'PPHE5533473251751',
'country': 'Turkmenistan',
'email': 'ubriggs@hill.info',
'first_name': 'Patrick',
'last_name': 'Cuevas'},
{'account': 'JCDK1943355298609',
'country': 'Fiji',
'email': 'brownclarence@gonzalez-moore.com',
'first_name': 'Gerald',
'last_name': 'Reyes'},
{'account': 'NERZ5502558659614',
'country': 'Costa Rica',
'email': 'teresa30@carpenter-warner.com',
'first_name': 'Christopher',
'last_name': 'Calderon'},
{'account': 'DLDV5789894914403',
'country': 'Martinique',
'email': 'leekatherine@williams.com',
'first_name': 'Shane',
'last_name': 'Weiss'},
{'account': 'GZZF6936998445532',
'country': 'Singapore',
'email': 'chasewatkins@perez-phillips.com',
'first_name': 'Crystal',
'last_name': 'Conley'},
{'account': 'ECGK2823955143629',
'country': 'Mayotte',
'email': 'hsherman@gmail.com',
'first_name': 'Jeffrey',
'last_name': 'Nelson'},
{'account': 'QOVO4275314052899',
'country': 'Costa Rica',
'email': 'martinezdaniel@hotmail.com',
'first_name': 'Brianna',
'last_name': 'Johnson'},
{'account': 'UKRT1119626365017',
'country': 'Guadeloupe',
'email': 'justinfischer@gmail.com',
'first_name': 'Brandon',
'last_name': 'Werner'},
{'account': 'UNPV3347450330173',
'country': 'Bahamas',
'email': 'cindy08@gmail.com',
'first_name': 'Brianna',
'last_name': 'Bennett'},
{'account': 'GJZT6825738428111',
'country': 'Azerbaijan',
'email': 'carolharrington@fleming.org',
'first_name': 'Austin',
'last_name': 'Fletcher'},
{'account': 'JOQE2648899771737',
'country': 'Saint Helena',
'email': 'lopezcarl@johnson.com',
'first_name': 'Patrick',
'last_name': 'Lewis'},
{'account': 'MNXY3262955868027',
'country': 'Hong Kong',
'email': 'michael74@yahoo.com',
'first_name': 'Joseph',
'last_name': 'Smith'},
{'account': 'YHXF7256577475630',
'country': 'Turkey',
'email': 'gonzalezrobert@hotmail.com',
'first_name': 'Sharon',
'last_name': 'Sullivan'},
{'account': 'MUVI3570791852556',
'country': 'Swaziland',
'email': 'dawnjohnson@gmail.com',
'first_name': 'Krystal',
'last_name': 'Wilson'},
{'account': 'UKCP6739617302102',
'country': 'Holy See (Vatican City State)',
'email': 'watersryan@gmail.com',
'first_name': 'Diana',
'last_name': 'Schmidt'},
{'account': 'WDAT4146843903498',
'country': 'Norfolk Island',
'email': 'byoung@gmail.com',
'first_name': 'Sean',
'last_name': 'Huff'},
{'account': 'SVMU4403517448078',
'country': 'Kenya',
'email': 'vhanson@yahoo.com',
'first_name': 'Robin',
'last_name': 'Nguyen'},
{'account': 'ZNUY4071301663622',
'country': 'Togo',
'email': 'bfletcher@yahoo.com',
'first_name': 'Robyn',
'last_name': 'Russell'},
{'account': 'GPFA8271551275648',
'country': 'San Marino',
'email': 'colleengarrison@hotmail.com',
'first_name': 'Tiffany',
'last_name': 'Smith'},
{'account': 'MKWY4848668895426',
'country': 'Romania',
'email': 'catherine23@gmail.com',
'first_name': 'Lori',
'last_name': 'Smith'},
{'account': 'QHIW7412514205367',
'country': 'Algeria',
'email': 'xmurphy@yahoo.com',
'first_name': 'Sabrina',
'last_name': 'Keith'},
{'account': 'QAAO4666689281736',
'country': 'Slovakia (Slovak Republic)',
'email': 'aaronrichard@middleton.net',
'first_name': 'Miguel',
'last_name': 'Johnson'},
{'account': 'LRPR8694143910883',
'country': 'Somalia',
'email': 'jesse93@best.com',
'first_name': 'Dustin',
'last_name': 'Barron'},
{'account': 'UWFU1921951273393',
'country': 'Turkmenistan',
'email': 'johnperez@johnson.com',
'first_name': 'Michael',
'last_name': 'Robinson'},
{'account': 'JQHS4274771257925',
'country': 'Croatia',
'email': 'jessica62@yahoo.com',
'first_name': 'Robert',
'last_name': 'Nguyen'},
{'account': 'RSLD0426398604312',
'country': 'Jamaica',
'email': 'jennifer87@gmail.com',
'first_name': 'Brandon',
'last_name': 'Abbott'},
{'account': 'UYHI6964741005832',
'country': 'Montserrat',
'email': 'morenolindsay@bass.org',
'first_name': 'Bruce',
'last_name': 'Oneill'},
{'account': 'ZKTE5908966955533',
'country': 'Heard Island and McDonald Islands',
'email': 'robertdavis@hotmail.com',
'first_name': 'Linda',
'last_name': 'Nash'},
{'account': 'HHHP3471562002758',
'country': 'Niger',
'email': 'melanie81@rogers.com',
'first_name': 'Kathleen',
'last_name': 'Cameron'},
{'account': 'UWLV6407825245995',
'country': 'Saint Vincent and the Grenadines',
'email': 'clineerin@hotmail.com',
'first_name': 'Wesley',
'last_name': 'Wilkinson'},
{'account': 'JRBN0811785293731',
'country': 'Antigua and Barbuda',
'email': 'terri95@hotmail.com',
'first_name': 'Debbie',
'last_name': 'Wallace'},
{'account': 'VDWY7565964041116',
'country': 'Mexico',
'email': 'danielle65@yahoo.com',
'first_name': 'Kayla',
'last_name': 'Woodward'},
{'account': 'DNRB2101855092009',
'country': 'Singapore',
'email': 'sjackson@yahoo.com',
'first_name': 'Stephanie',
'last_name': 'Bennett'},
{'account': 'IILE1765776198023',
'country': 'Botswana',
'email': 'douglas63@yahoo.com',
'first_name': 'Caleb',
'last_name': 'Jenkins'},
{'account': 'ZJUF2687631787282',
'country': 'Guinea',
'email': 'woodardlindsey@yahoo.com',
'first_name': 'Valerie',
'last_name': 'Edwards'},
{'account': 'DHMT4208071148508',
'country': 'Chile',
'email': 'suebrown@yahoo.com',
'first_name': 'Mary',
'last_name': 'Anderson'},
{'account': 'UBRR8524342666714',
'country': 'Mayotte',
'email': 'swhite@yahoo.com',
'first_name': 'Angela',
'last_name': 'Ray'},
{'account': 'OGPU6537909247863',
'country': 'Macedonia',
'email': 'martinkimberly@lopez.com',
'first_name': 'Haley',
'last_name': 'Edwards'},
{'account': 'AHYX6128839695452',
'country': 'Ukraine',
'email': 'jessica11@hotmail.com',
'first_name': 'Charles',
'last_name': 'Clark'},
{'account': 'VUPW6891906300822',
'country': 'Saint Martin',
'email': 'hsmith@baker.com',
'first_name': 'Lisa',
'last_name': 'Hill'},
{'account': 'PKFW4841194501766',
'country': 'Germany',
'email': 'fklein@yahoo.com',
'first_name': 'Jonathan',
'last_name': 'Carpenter'},
{'account': 'BNYD8693045932496',
'country': 'Lesotho',
'email': 'ryan32@skinner.com',
'first_name': 'Latoya',
'last_name': 'Griffith'},
{'account': 'FQJA6381776349463',
'country': 'Nepal',
'email': 'tmurphy@flores.biz',
'first_name': 'Kim',
'last_name': 'Blair'},
{'account': 'KCNI2464381879411',
'country': 'Latvia',
'email': 'mary64@ray.org',
'first_name': 'Mary',
'last_name': 'Salazar'},
{'account': 'BIGY3006735396533',
'country': 'Central African Republic',
'email': 'jennajoseph@yahoo.com',
'first_name': 'Kenneth',
'last_name': 'Krueger'},
{'account': 'CNJX1222752295544',
'country': 'Peru',
'email': 'watsonsamuel@gmail.com',
'first_name': 'Phillip',
'last_name': 'Burke'},
{'account': 'ZROP5229895490397',
'country': 'Spain',
'email': 'xvelasquez@hughes.com',
'first_name': 'Erica',
'last_name': 'Juarez'},
{'account': 'NXKK2792812848629',
'country': 'Seychelles',
'email': 'april99@gmail.com',
'first_name': 'Jason',
'last_name': 'Watkins'},
{'account': 'DPLN5056382218296',
'country': 'Faroe Islands',
'email': 'kfletcher@yahoo.com',
'first_name': 'Lee',
'last_name': 'Carter'},
{'account': 'KAOL9792684486009',
'country': 'Tokelau',
'email': 'xchurch@hotmail.com',
'first_name': 'Randy',
'last_name': 'Huang'},
{'account': 'WRXW4627191899235',
'country': 'Cocos (Keeling) Islands',
'email': 'megan24@stewart.net',
'first_name': 'Kristina',
'last_name': 'Owen'},
{'account': 'OMOK4767172062189',
'country': 'Burundi',
'email': 'sydneycollins@hunter.com',
'first_name': 'Beth',
'last_name': 'Turner'},
{'account': 'KRKF7344951038740',
'country': 'Timor-Leste',
'email': 'robertbowen@chavez-ortega.com',
'first_name': 'Michael',
'last_name': 'Aguirre'},
{'account': 'SAAA4141150617330',
'country': 'Montserrat',
'email': 'christiandanielle@yahoo.com',
'first_name': 'Elizabeth',
'last_name': 'Wilson'},
{'account': 'XNWQ1072087896797',
'country': 'Norway',
'email': 'kdavidson@gordon.com',
'first_name': 'Teresa',
'last_name': 'Hardy'},
{'account': 'FTHM1005169617995',
'country': 'Sierra Leone',
'email': 'bennettwanda@vega-guerra.net',
'first_name': 'David',
'last_name': 'Stewart'},
{'account': 'OSSM9070924947595',
'country': 'French Polynesia',
'email': 'mark00@hotmail.com',
'first_name': 'Heather',
'last_name': 'Moore'},
{'account': 'CFQJ4204773901237',
'country': 'French Guiana',
'email': 'schaefernatalie@hotmail.com',
'first_name': 'Melissa',
'last_name': 'Grant'},
{'account': 'MGFG2793756668287',
'country': 'Cape Verde',
'email': 'moralesmartin@rodgers.com',
'first_name': 'Jennifer',
'last_name': 'Thompson'},
{'account': 'IGXK5881682171566',
'country': 'Barbados',
'email': 'dprince@hotmail.com',
'first_name': 'Raymond',
'last_name': 'Anderson'},
{'account': 'QYBW6359021109484',
'country': 'Andorra',
'email': 'cparks@valdez-hudson.com',
'first_name': 'Angela',
'last_name': 'Ramsey'},
{'account': 'UTSI0776569247505',
'country': 'Montserrat',
'email': 'martinezrichard@yahoo.com',
'first_name': 'Betty',
'last_name': 'Gonzales'},
{'account': 'LSDI9463735752680',
'country': 'Egypt',
'email': 'kpena@yahoo.com',
'first_name': 'Thomas',
'last_name': 'Castaneda'},
{'account': 'ISYY1401931979959',
'country': 'Malaysia',
'email': 'julie68@gmail.com',
'first_name': 'Jonathan',
'last_name': 'Todd'},
{'account': 'HNOA0376843856035',
'country': 'Zimbabwe',
'email': 'lukebradford@hotmail.com',
'first_name': 'Stacey',
'last_name': 'Garcia'},
{'account': 'EEVV8325881104553',
'country': 'Portugal',
'email': 'ystewart@yahoo.com',
'first_name': 'Judy',
'last_name': 'Figueroa'},
{'account': 'QXGZ3111246190069',
'country': 'Paraguay',
'email': 'cory33@king-shaw.net',
'first_name': 'Ashley',
'last_name': 'Castillo'},
{'account': 'ACQR2846533122117',
'country': 'Central African Republic',
'email': 'zcalhoun@gmail.com',
'first_name': 'Zachary',
'last_name': 'Flores'},
{'account': 'ZAZD8310339637467',
'country': 'Palau',
'email': 'michaelhall@hotmail.com',
'first_name': 'Erica',
'last_name': 'Allen'},
{'account': 'ARWK1547324119222',
'country': 'Micronesia',
'email': 'kristentaylor@yahoo.com',
'first_name': 'Savannah',
'last_name': 'Potts'},
{'account': 'OMQX4840913072589',
'country': 'Armenia',
'email': 'stephen63@yahoo.com',
'first_name': 'Zachary',
'last_name': 'Wheeler'},
{'account': 'OCFV4659464275270',
'country': 'Bahrain',
'email': 'bryanmartin@gmail.com',
'first_name': 'Timothy',
'last_name': 'Thomas'},
{'account': 'DTRB4720098955341',
'country': 'Guatemala',
'email': 'kristinavelasquez@gmail.com',
'first_name': 'Ann',
'last_name': 'Mcknight'},
{'account': 'YYHM5758234683389',
'country': 'Saint Vincent and the Grenadines',
'email': 'denise01@burns.org',
'first_name': 'Ruth',
'last_name': 'Thompson'},
{'account': 'AHBN3151680654826',
'country': 'Kazakhstan',
'email': 'beancody@jones.com',
'first_name': 'Daniel',
'last_name': 'Levy'},
{'account': 'FGBC0366153271398',
'country': 'Germany',
'email': 'ubradley@yahoo.com',
'first_name': 'Paul',
'last_name': 'Hubbard'},
{'account': 'MHTE8867005510944',
'country': 'Western Sahara',
'email': 'anthony75@yahoo.com',
'first_name': 'Jason',
'last_name': 'Jones'},
{'account': 'IYOD4325345823013',
'country': 'Togo',
'email': 'antonio52@gmail.com',
'first_name': 'Margaret',
'last_name': 'Garcia'},
{'account': 'NZFX8257739892619',
'country': 'Guam',
'email': 'johnlewis@hotmail.com',
'first_name': 'Jeremy',
'last_name': 'Peters'},
{'account': 'MWRB2515761996641',
'country': 'Kuwait',
'email': 'nmoore@hotmail.com',
'first_name': 'Mark',
'last_name': 'Stone'},
{'account': 'CURJ9953745256871',
'country': 'Eritrea',
'email': 'nchurch@yahoo.com',
'first_name': 'Darius',
'last_name': 'Edwards'},
{'account': 'ATOT8581137487723',
'country': 'Czech Republic',
'email': 'piercejenna@gmail.com',
'first_name': 'Tracy',
'last_name': 'Lawson'},
{'account': 'RQGA0882784089265',
'country': 'Maldives',
'email': 'ddavidson@hotmail.com',
'first_name': 'Christina',
'last_name': 'Cooper'},
{'account': 'EOPA8088866975598',
'country': 'Armenia',
'email': 'ndelacruz@yahoo.com',
'first_name': 'Megan',
'last_name': 'Harris'},
{'account': 'JCUN9597199552039',
'country': 'Benin',
'email': 'jenniferadkins@griffin.biz',
'first_name': 'Timothy',
'last_name': 'Jones'},
{'account': 'IZYL3351829981461',
'country': 'Fiji',
'email': 'evansmiguel@yahoo.com',
'first_name': 'Tracie',
'last_name': 'Burch'},
{'account': 'JDIH2349154465371',
'country': 'Iceland',
'email': 'kenneththompson@baxter.com',
'first_name': 'Jason',
'last_name': 'Chung'},
{'account': 'VRZP1447516193511',
'country': 'Macedonia',
'email': 'bcurtis@hotmail.com',
'first_name': 'Samantha',
'last_name': 'Melton'},
{'account': 'QKAF2254397516681',
'country': 'Serbia',
'email': 'phillipssean@hotmail.com',
'first_name': 'Michael',
'last_name': 'Hansen'}]
7.2.2. Exercise 2#
Write a function to convert month number to month name. First use a list and then a dictionary
Show code cell source
def convert_to_month_list(month):
months = [
'',
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
]
return months[month]
print(convert_to_month_list(3))
def convert_to_month_dict(month):
months = {
1: 'January',
2: 'February',
3: 'March',
4: 'April',
5: 'May',
6: 'June',
7: 'July',
8: 'August',
9: 'September',
10: 'October',
11: 'November',
12: 'December',
}
return months[month]
print(convert_to_month_list(3))
March
March
7.2.3. Exercise 3#
Convert a text message to numbers using the following number scheme
0 space
1 ., ?, !
2 ABC
3 DEF
4 GHI
5 JKL
6 MNO
7 PQRS
8 TUV
9 WXYZ
Show code cell source
def convert_message_to_numbers(message):
lookup = {
0: ' ',
1: '.,?!',
2: 'ABC',
3: 'DEF',
4: 'GHI',
5: 'JKL',
6: 'MNO',
7: 'PQRS',
8: 'TUV',
9: 'WXYZ'
}
lookup_map = {}
for key, value in lookup.items():
for ele in value:
lookup_map[ele] = key
# order is important!!!!
lookup_map = {ele: key for key, value in lookup.items() for ele in value }
# order incorrect
# lookup_map = {ele: key for ele in value for key, value in lookup.items()}
# lookup = (
# (0, ' '),
# (1, '.,?!'),
# (2, 'ABC'),
# (3, 'DEF'),
# (4, 'GHI'),
# (5, 'JKL'),
# (6, 'MNO'),
# (7, 'PQRS'),
# (8, 'TUV'),
# (9, 'WXYZ'),
# )
# lookup_map = {}
# for key, value in lookup:
# for ele in value:
# lookup_map[ele] = key
numbers = ''
for char in message:
numbers += str(lookup_map[char.upper()])
lookup_map = {ele: str(key)*idx for key, value in lookup.items() for idx, ele in enumerate(value, 1) }
print(lookup_map)
numbers = ''
for char in message:
numbers += lookup_map[char.upper()]
return numbers
print(convert_message_to_numbers('Hello, World!'))
{' ': '0', '.': '1', ',': '11', '?': '111', '!': '1111', 'A': '2', 'B': '22', 'C': '222', 'D': '3', 'E': '33', 'F': '333', 'G': '4', 'H': '44', 'I': '444', 'J': '5', 'K': '55', 'L': '555', 'M': '6', 'N': '66', 'O': '666', 'P': '7', 'Q': '77', 'R': '777', 'S': '7777', 'T': '8', 'U': '88', 'V': '888', 'W': '9', 'X': '99', 'Y': '999', 'Z': '9999'}
4433555555666110966677755531111
7.2.4. Exercise 4#
Write a function that uses enumerate to print the index and value from range. Use vary the enumerate start index
Show code cell source
def test_enumerate(range_value):
for index, value in enumerate(range(range_value), 1):
print(index, value)
test_enumerate(10)
1 0
2 1
3 2
4 3
5 4
6 5
7 6
8 7
9 8
10 9
7.2.5. Exercise 5#
Simulate two dice. Print the total, theoretical/expected probability, and simulated probability input: the number of simulations https://socratic.org/questions/what-is-the-expected-value-of-the-sum-of-two-rolls-of-a-six-sided-die
# Total Simulated Percent Expected Percent
# 2 2.76 2.78
# 3 5.57 5.56
# 4 8.34 8.33
# 5 11.1 11.11
# 6 13.83 13.89
# 7 16.68 16.67
# 8 13.9 13.89
# 9 11.1 11.11
# 10 8.36 8.33
# 11 5.57 5.56
# 12 2.79 2.78
Show code cell source
def simulate_two_dice(no_simulation):
import random
theoretical_probabilities = [
0,
0,
1 / 36,
2 / 36,
3 / 36,
4 / 36,
5 / 36,
6 / 36,
5 / 36,
4 / 36,
3 / 36,
2 / 36,
1 / 36,
]
two_dice = {}
for no in range(no_simulation):
dice1 = random.randint(1, 6)
dice2 = random.randint(1, 6)
total = dice1 + dice2
if total not in two_dice:
two_dice[total] = 0
two_dice[total] += 1
simulated_probability = [0, 0]
for number in range(2, 13):
simulated_probability.append(two_dice[number] / no_simulation)
column1 = 'Total'
column2 = 'Simulated Percent'
column3 = 'Expected Percent'
print(
column1.ljust(6),
column2.rjust(20),
column3.rjust(20),
'\n'
)
for number in range(2, 13):
sp = round(simulated_probability[number] * 100, 2)
tp = round(theoretical_probabilities[number] * 100, 2)
print(
str(number).ljust(6),
str(sp).rjust(20),
str(tp).rjust(20),
)
simulate_two_dice(1000000)
Total Simulated Percent Expected Percent
2 2.77 2.78
3 5.53 5.56
4 8.36 8.33
5 11.09 11.11
6 13.86 13.89
7 16.73 16.67
8 13.85 13.89
9 11.15 11.11
10 8.34 8.33
11 5.55 5.56
12 2.78 2.78