Python编程-第六章-字典

字典

一个简单的字典

一个简单的字典

alien_0 = {'color': 'green','points': 5}  
  
print(alien_0['color'])  
print(alien_0['points'])

添加键值对

alien_0 = {'color':'greem','points': 5}  
print(alien_0)  
alien_0['x_position'] = 0  
alien_0['y_postions'] = 25  
print(alien_0)

修改字典中的值

alien_0 = {'color':'greem'}  
print(f"The alien is {alien_0['color']}.")  
alien_0['color']='yellow'  
print(f"The alien is now{alien_0['color']}.")
# 外星人移动速度。
alien_0={'x_position': 0,'y_posistion':25,'speed':'medium'}  
print(f"Original position:{alien_0['x_position']}")  
# 向右移动外星人。  
# 更具当前速度确定将外星人向右移动多远。  
if alien_0['speed']=='slow':  
    x_increment = 1  
elif alien_0['speed']=='medium':  
    x_increment = 2  
else:  
    x_increment = 3  
alien_0['x_position'] = alien_0['x_position'] + x_increment  
print(f"New position: {alien_0['x_position']}")

删除字典中的键值对

alien_0={'color':'green','points':5}  
print(alien_0)  
del alien_0['points']  
print(alien_0)

由类似的对象组成的字典

由类似对象组成的字典

favorite_languages = {  
    'jen': 'python',  
    'serah': 'c',  
    'edward': 'ruby',  
    'phil': 'python',  
}  
  
language = favorite_languages['serah'].title()  
print(f"Sarah's favorite language is {language}.")

使用get()访问值

alien_0 = {'color': 'green','speed': 'slow'}  
print (alien_0['points'])
Warning

以上语句报错Traceback

alien_0 ={'color': 'green','speed': 'slow'}
point_value = alien_0.get('points',"No poin value assgined.")
print(point_value)

注意 调用get() 时,如果没有指定第二个参数且指定的键不存在,Python将返回值None 。这个特殊值表示没有相应的值。None 并非错误,而是一个表示所需值不存在的特殊值,第8章将介绍它的其他用途

练习题

persion={'first_name': 'chen','last_name': 'cheng','age': '23','city': 'chongqing'}
print(persion)

number={'alice': '9','chen': '5'}
out_put = number.get('alice',"No poin values as ")
print(out_put)

遍历字典

遍历所有键值对

探索各种遍历方法前,先来看一个新字典,它用于存储有关网站用户的信息。下面的字典存储一名用户的用户名、名和姓:

user_0={
    'username': 'efermi',
    'first': 'enrico',
    'last': 'fermi',
}
for key ,value in user_0.items():
    print(f"\nKey: {key}")
    print(f"value: {value}")

打印键名和数值

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
for name ,language in favorite_languages.items():
    print(f"{name.title()}'s favorite language is {language.title()}.")

只打印键名称

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
for name in favorite_languages.keys():
    print(f"{name.title()}")
# 注意:默认是只打印键的名称
for name in favorite_languages:
    print(f"{name.title()}")
# 注意:默认排序后进行打印键的名称
for name in sorted(favorite_languages.keys()):
    print(f"{name.title()},tank you for taking the poll.")

遍历字典中所有的值

favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
}
print("The following languages have been mentioned:")
for language in favorite_languages.values():
    print(language.title())
# 去重后的值
print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
    print(language.title())

Warning

注意:集合和字典的区别。

languaes={'python','ruby','python','c'}
print(languaes)

集合和字典很容易混淆,因为它们都是用一对花括号定义的。当花括号内没有键值对时,定义的很可能是集合。不同于列表和字典,集合不会以特定的顺序存储元素

练习题

练习6-5:河流 创建一个字典,在其中存储三条重要河流及其流经的国家。例如,一个键值对可能是'nile': 'egypt' 。

rivers = {'nile': 'egypt','chana1': 'huanghe','chana':'changjiang'}
for contry,river in rivers.items():
    print(f"The {river} runs through {contry}")
for river in rivers.values():
    print(f"{river.title()}")
for contry in rivers.keys():
    print(f"{contry.title()}")

字典的嵌套

字典嵌套到列表中

alien_0 ={'color': 'green','points': 5}
alien_1 ={'color': 'yellow','points': 10}
alien_2 = {'color': 'red','points': 15}
aliens=[alien_2,alien_1,alien_0]
for alien in aliens:
    print(alien)
# 批量创建字典并嵌套在列表中
aliens = []
for alien_number in range(30):
    new_alien ={'color': 'green','points': 5,'speed': 'slow'}
    aliens.append(new_alien)
for alien in aliens[:5]:
    print(alien)
print("...")
# 显示创建了多少个外星人
print(f"Total number of aliens: {len(aliens)}")

批量修改字典值

aliens = []
for alien_number in range(30):
    new_alien ={'color': 'green','points': 5,'speed': 'slow'}
    aliens.append(new_alien)
for alien in aliens[0:5]:
    if alien['color'] == 'green':
        alien['color'] = 'yellow'
        alien['speed'] = 'medium'
        alien['points'] = 10
for alien in aliens[0:3]:
    if alien['color'] == 'yellow':
        alien['color'] = 'red'
        alien['speed'] = 'fast'
        alien['points'] = 15

for alien in aliens[:5]:
    print(alien)
print("...")
# 显示创建了多少个外星人
print(f"Total number of aliens: {len(aliens)}")


将列表存储到字典中

favorite_lanuages = {
    'jen': ['python','ruby'],
    'sarah': ['c'],
    'edward': ['ruby','go'],
    'phil':['python','haskell'],
}
for name ,lanuages in favorite_lanuages.items():
    print(f"\n{name.title()}'s favorite languages are:")
    for lanuage in lanuages:
        print(f"\t{lanuage.title()}")

在字典中存储字典

users = {
    'aeinstein': {
        'first': 'albert',
        'last': 'einstein',
        'location': 'princeton',
    },
    'mcurie': {
        'first': 'marie',
        'last': 'curie',
        'location': 'paris',
    },
}
for username ,user_info in users.items():
    print(f"\nUsername: {username}")
    full_name =f"{user_info['first']} {user_info['last']}"
    location = user_info['location']

    print(f"\tFull name: {full_name.title()}")
    print(f"\tLocation: {location.title()}")

练习题

为完成练习6-1而编写的程序中,再创建两个表示人的字典,然后将这三个字典都存储在一个名为people 的列表中。遍历这个列表,将其中每个人的所有信息都打印出来。

persion0={'first_name': 'alice','last_name': 'tag','age': '23','city': 'chongqing'}
persion1={'first_name': 'chen','last_name': 'cheng','age': '23','city': 'chongqing'}
persion2={'first_name': 'his','last_name': 'like','age': '23','city': 'chongqing'}
persions = [persion0,persion1,persion2]
for per in persions:
    print(per)

练习6-8:宠物 创建多个表示宠物的字典,每个字典都包含宠物的类型及其主人的名字。将这些字典存储在一个名为pets 的列表中,再遍历该列表,并将有关每个宠物的所有信息都打印出来。

dog1={'name': 'pipi','age':'3','kind': 'dog','master': 'alice'}
dog2={'name': 'pipi','age':'3','kind': 'dog','master': 'alice'}
dog3={'name': 'pipi','age':'3','kind': 'dog','master': 'alice'}
pets=[dog1,dog2,dog3]
for pet in pets:
    print(f"{pet}")

练习6-9:喜欢的地方 创建一个名为favorite_places 的字典。在这个字典中,将三个人的名字用作键,并存储每个人喜欢的1~3个地方。为了让这个练习更有趣些,可以让一些朋友说出他们喜欢的几个地方。遍历这个字典,并将其中每个人的名字及其喜欢的地方打印出来

favorite_places={
    'alice': ['china','talan'],
    'chencheng': ['chongqing','luzhou'],
    'yingjunli': ['sanya'],
}
for name,places in favorite_places.items():
    print(f"{name.title()}'s favorite place are:")
    for place in places:
        print(f"\t{place.title()}")

练习6-10:喜欢的数2 修改为完成练习6-2而编写的程序,让每个人都可以有多个喜欢的数,然后将每个人的名字及其喜欢的数打印出来

favorite_number={
    'alice': ['1','3','5'],
    'job': ['2','4','6'],
}
for name,numbsers in favorite_number.items():
    print(f"{name.title()}'s favorite number are:")
    for num in numbsers:
        print(f"\t{num}")