python自学Day05(自学书籍python编程从入门到实践)

第6章 字典

6.1 一个简单的字典

  • 先跟随书本创建一个简单的字典感受一下。
1 alien_0 = {'color':'green','points':5}
2 print(alien_0['color'])
3 print(alien_0['points'])

输出结果为:

green
5
  • 第1行 创建一个alien_0的字典 key 分别为 color 和 points
  • 第2行 读取color对应的值 并且 打印出来
  • 第3行 读取points对应的值 并且 打印出来

6.2 使用字典

  • 字典是一些列的键-值对,每个键都与一个值相关联。
  • 可以使用键来访问与之对应的值,值可以是数字、字符串、列表乃至字典。
  • 字典是放在{}中一系列的键-值对。键与值之间用 冒号 :隔开

6.2.1 访问字典中的值

  • 要获取与键相关的值,可以依次指定字典名和放在方括号内的键 如6.1下代码 alien_0['color']

6.2.2 添加键-值对

  • 字典是一种动态结构,可以随时添加键-值对。
  • 要添加键-值对,可依次指定字典名、用方括号括起来的键和相关联的值。
  • python中不关心键-值对的添加顺序,而只是关心键和值之间的关联联系。
alien_0 = {'color':'green','points':5}
#在字典中添加一个新的键 x_position 值为0
alien_0['x_position'] = 0
#在字典中添加一个新的键 y_position 值为25
alien_0['y_position'] = 25
#打印检查下列表
print(alien_0)

输出结果为:

{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 25}

6.2.3 先创建一个空字典

  • 先创建一个空字典,然后逐个往里面添加键-值对
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
print(alien_0)

输出结果为:

{'color': 'green', 'points': 5}

6.2.4 修改字典中的值

  • 要修改字典中的值。可以依次指定字典名、用方括号括起来的键以及与键关联的新值。
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
print(alien_0)
#修改字典中 color 关联值为 red
alien_0['color'] = 'red'
#再度输出字典检查变化
print(alien_0)

输出结果为:

{'color': 'green', 'points': 5}
{'color': 'red', 'points': 5}

6.2.5 删除键-值对

  •  使用del语句将字典中的键-值对彻底删除。
  • 使用del语句时,必须指定字典名和要删除的键。
alien_0 = {'color':'green','points':5}
del alien_0['color']
print(alien_0)

输出结果为:

{'points': 5}

6.2.6 由类似对象组成的字典

  • 字典不仅可以像前面的示例一样存储一个对象,我们也可以用来存贮众多对象的同一信息。
  • 换行时需要一行缩进死歌空格(默认tab键)最后一行一个缩进加花括号。
  • 还有一些其他可行的格式设置方法。
  • print 内容较多需要换行编写代码时,也需要缩进。
#注意 缩进 逗号 花括号 格式
favorite_language = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
print("sarah's favorite language is "+
      favorite_language['sarah'].title()+
      '.')

输出结果为:

sarah's favorite language is C.

练习:

#练习6-1
My_Lover ={
    'first_name':'zhang',
    'last_name':'keai',
    'age':18,
    'city':'xiaogan'
    }
print(My_Lover)

输出结果为:

{'first_name': 'zhang', 'last_name': 'keai', 'age': 18, 'city': 'xiaogan'}

6.3 遍历字典

  • 遍历字典三种方法:键-值对 键 值

6.3.1 遍历所有的键-值对

  • 使用for循环编写字典的遍历循环,声明两个变量 key valu(可取任意合规名称)用于存贮对应的键、值。
  • 方法items()表示返回一个键-值对列表。
  • 键-值对的返回顺序与存贮顺序不同,字典是无序的,只关心键-值之间的关系
favorite_language = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
for key,value in favorite_language.items():
    print(key.title()+
          '\'s favorite language is'+
          value.title())

输出结果为:

Jen's favorite language isPython
Sarah's favorite language isC
Edward's favorite language isRuby
Phil's favorite language isPython

6.3.2 遍历字典中所有的键

  •  遍历字典时,python中默认是遍历字典的所有键。
  • 我们也可以使用方法keys(),这样可以更清晰更明确。
  • 方法keys并非只能用于遍历,实际上他返回一个列表,其中包含字典中所有的键。
favorite_language = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
friend_name = ['phil','sarah']
for name in favorite_language.keys():
    if name in friend_name:
        print('My friend '+
              name +
              ' is in the list!')

输出结果为:

My friend sarah is in the list!
My friend phil is in the list!

6.3.3 按顺序遍历字典中所有键

  • 字典总是明确的记录键和值之间的关系,但是获取字典元素时,获取顺序是不可预测的。
  • 要以特定的顺序返回元素,一种方法是在for循环中对返回的键做排序。
  • 使用函数sorted来获得特定顺序拍了的键列表的副本。
favorite_language = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
for name in sorted(favorite_language.keys()):
    print(name.title() + ' is in the dictionary')

输出结果为:

Edward is in the dictionary
Jen is in the dictionary
Phil is in the dictionary
Sarah is in the dictionary

6.3.4 遍历字典中的所有值

  • 字典中键是独一无二的,不可重复的,但是值并不是,像上述代码中的 python在值中出现了两次。
  • 可以使用values()方法对字典进行值得遍历,返回一个值得列表,不包含任意键。
  • 如果字典中存在大量重复值,而这些值我们不想要他重复,我们可以使用set()来对返回值得列表去重。
  • 集合类似于列表,但是集合内的元素必须是独一无二的。
favorite_language = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
    }
for language in set(favorite_language.values()):
    print(language.title())

输出结果为:

Ruby
C
Python

6.4 嵌套

  • 将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。

6.4.1 字典列表

#创建空列表
aliens = [ ]
#使用for循环计次循环,循环30次。
for new_alien in range(0,30):
#每次循环将字典new_alien添加到列表中去
    new_alien={'color':'green','points':5}
    aliens.append(new_alien)
#结束后输出列表的长度,可以看到包含30个元素,每个元素都是独立的列表。
print(len(aliens))

输出结果为:

30

6.4.2 在字典中存储列表

  • 每当需要在字典的一个键关联多个值得时候,都可以在字典中嵌套一个列表。
  • 列表和字典的嵌套层级不应太多。如过嵌套层级太多,很有可能有更简单的解决问题方案。
My_imformation = {
    '姓名':'饶庆龙',
    '爱好':['篮球','足球','英雄联盟']
    }
print('你好'+My_imformation['姓名']+'先生!这是您的爱好:')
for hobbies in My_imformation['爱好']:
    print('\t'+hobbies )

输出结果为:

你好饶庆龙先生!这是您的爱好:
    篮球
    足球
    英雄联盟

6.4.3 在字典中存贮字典

  • 可以在字典中嵌套字典,但是这样做,代码可能很快复杂起来。
  • 倘若字典包含不同的键,for内部循环的代码将会更加的复杂。
 1 My_imformation ={
 2     '饶庆龙': {
 3         '性别':'男',
 4         '住址':'湖北',
 5         '爱好':['篮球','足球','英雄联盟']
 6         },
 7     '张余丽':{
 8         '性别':'女',
 9         '住址':'北京',
10         '爱好':['王者','睡觉','追剧']
11         },
12     }
13 Names = []
14 for name,imformations in My_imformation.items():
15     if imformations['性别'] == '男':
16         print(name+'先生的爱好是:')
17         for hobby in imformations['爱好']:
18             print('\t'+hobby)
19     if imformations['性别'] == '女':
20         print(name+'女士的爱好是:')
21         for hobby in imformations['爱好']:
22             print('\t'+hobby)
  • 第1行到第12行,我们构建了一个字典。
  • 字典中包含了两个 键 一个 饶庆龙 一个 张余丽
  • 第14行 我们使用for循环我们构建遍历字典键-值对 获得键存贮为 name 获得值存储为 imformations
  • 第15行 我们判断值中列表对应的键 性别的值是否是 男
  • 第16行 判断成功的话我们输出 name+先生的爱好是,如果判断失败进入第19行判断
  • 第17行 对 ‘爱好’ 对应的列表值进行循环输出
  • 第18行 输出时加上 '\t'制表符以及爱好内容循环输出
  • 第19行 当第15行条件测试不通过时跳到该条条件测试

输出结果为:

饶庆龙先生的爱好是:
    篮球
    足球
    英雄联盟
张余丽女士的爱好是:
    王者
    睡觉
    追剧

 

上一篇:Python数据类型(字典和集合)


下一篇:A Tour of Go Switch with no condition