一个简单的字典

ailen_0 = {
   'color':'green','point':5}

print(alien_0['color'])
print(alien_0['points'])

字典alien_0存储了外星人的颜色和分数

使用字典

字典是一系列键值对,与键相关联的值可以是数,字符串,列表或者字典
在python中,字典用放在花括号({})中的一系列键值对表示
键值对是对两个相关联的值。指定键时,将返回到与之相关联的值,键和值之间用冒号分隔,键值对之间用逗号分隔

访问字典中的值

添加键值对

alien_0['x_position'] = 0
alien_0['y_position'] = 0

新增两个键值对

修改字典中的值

alien_0 = {
   'color':'green'}
print(f"the alien is {
     alien_0['color']}.")

alien_0['color' = 'yellow']
print(f"the alien is now {
     alien_0['color']}.")

修改‘color’相关联的值改为‘yellow’

删除键值对

使用del语句,必须指定字典名和要删除的键

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

由类似对象组成的字典

fav_lan = {
    
	'jan':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}

language = fav_lan['sarah'].title()
print(f"sarah favorite language is {
     language}.")

使用get()来访问值

从字典中访问指定的键不存在时会报错
显示traceback
所以采用方法get()在指定的键不存在时返回一个默认值

alien_0 = {
   'color':'green','speed':'slow'}

point_value = alien_0.get('points','no point value assiged.')
print(point_value)

输出结果:no point value assiged.

遍历字典

遍历所有键值对

采用for循环

user = {
   
	'username':'efermi',
	'first':'enrico',
	'last':'femi',
	}

for key,value in user.items():
	print(f"\nKey:{
     key}")
	print(f"Value:{
     value}")

输出结果

Key:username
Value:efermi

Key:first
Value:enrico

Key:last
Value:femi

遍历字典中所有值

在不需要使用字典中的值时,方法keys()很有用

fav_lan = {
    
	'jan':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}

for name in fav_lan.keys():
	print(name.title())

最后倒数第二行也可写成
for name in fav_lan:
输出不变

按特定顺序遍历字典中的所有键

在for循环中对返回的值进行排序,使用函数sorted()来获得按特定顺序排列的键列表的副本

fav_lan = {
    
	'jan':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}

for name in sorted(fav_lan.keys()):
	print(f"{
     name.title()},thank you for taking the poll.")

sorted()采用ASCII码比较,第一个字符相同就比较下一个

遍历字典中的所有值

使用方法values()来返回一个值列表,不包含任何键

fav_lan = {
    
	'jan':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}

for language in fav_lan.values():
	print(language.title())

剔除重复项,可使用集合set,集合中的每个元素都必须是独一无二的

fav_lan = {
    
	'jan':'python',
	'sarah':'c',
	'edward':'ruby',
	'phil':'python',
	}

for language in set(fav_lan.values()):
	print(language.title())

更简单的用法

languages = {
   'python','ruby','c','python'}
languages
{
   'python','ruby','c'}

嵌套

将一系列字典存储在列表中,或将列表组作为值存储在字典中,称之为嵌套

字典列表

创建包含三个alien的列表

alien_0 = {
   'color':'green','points':5}
alien_1 = {
   'color':'yellow','points':10}
alien_2 = {
   'color':'red','points':15}

aliens = [alien_0,alien_1,alien_2]
for alien in aliens:
	print(alien)

现实情况,alien不止三个,如下面用range()生成30个相同特征的alien

# 创建一个存储空列表
aliens = []

# 创建30个
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(f"total number of aliens:{
     len(aliens)}")

修改一些数据

for alien in aliens[:3]:
    if alien['color'] == 'green':
        alien['color'] == 'yellow'
        alien['speed'] == 'medium'
        alien['points'] = 10
    elif alien['color'] == 'yellow':
        alien['color'] == 'red'
        alien['speed'] == 'fast'
        alien['points'] = 15

在字典中存储列表

有时需要将列表存储在字典中

# 存储所点披萨的信息
pizza = {
   
    'crust':'thick',
    'toppings':['mushrooms','extra cheese'],
}

# 概述所点的披萨
print(f"you ordered a {
     pizza['crust']}-crust pizza "
    "with the following toppings:")

for topping in pizza['toppings']:
    print("\t" + topping)

为打印配料,编写一个for循环。为访问配料列表,使用键‘toppings’

每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表

fav_lan = {
    
	'jan':['python','ruby'],
	'sarah':['c'],
	'edward':['ruby','go'],
	'phil':['python','haskell'],
	}

for name,languages in fav_lan.items():
	print(f"\n{
     name.title()}'s favorite languages are:")
	for language in languages:
		print(f"\t{
     language.title()}")

现在与每个名字相关联的值都是一个列表,在遍历字典的主循环中,使用了另一个for循环来遍历每一个人喜欢的语言列表

在字典中存储字典

代码会很复杂

users = {
   
    'aeinstein':{
   
        'first':'albert',
        'last':'einstein',
        'location':'princetion',
    },

    '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()}")

首先定义一个user字典,包含两个键‘aeinstein’,‘mcurie’
与每个键相关联的值都是一个字典,然后遍历users,接着开始访问内部字典,变量user_info包含用户信息字典