Py学习  »  Python

Python中字典用法完全解读

Python中文社区 • 5 年前 • 575 次点击  


文/黑水银  图片来源于网络

在本文中,你将学习能够将相关信息关联起来的Python字典。学习如何访问和修改字典中的信息,鉴于字典可储存的信息量几乎不受限制,因此我们会演示如何遍历字典中的数据。另外,还将学习储存字典的列表,储存列表的子弟和储存字典的字典。

理解字典后,你就能更准确地为各种真实物体建模。

一个简单的字典

alien.py

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

使用字典

在Python中,字典是一系列键值对.每个都与一个值相关联,你可以使用键来访问与之关联的值.与键相关联的值可以实数字,字符串,列表,乃至字典。

{% note danger %}
字典用放在花括号 {} 中的一系列键值对表示. 键值对有两个相关联的值. 键和值之间用冒号分隔,而键值对之间之间用逗号分隔。
{% endnote %}

访问字典中的值

要获取与键相关联的值,可依次制定字典名和放在方括号内的键

alien_0 {'color':'green'}
print (alien_0['color'])
green
alien_0 = {'color':'green','points':5}
new_points = alien_0['points']
print ('you just earned ' + str(new_points) + " points!")
you just earned 5 points!

添加键值对

字典是一种动态结构,可随时在其中添加键值对.要添加键值对,可依次指定字典名,用方括号扩起的键合相关联的值。

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



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

先创建一个空字典

有时候,在空字典中添加键值对是为了方便,而有时候必须这样做.为此,可以使用一对空的花括号定义一个字典,再分别添加各个键值对。

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

修改字典中的值

要修改字典中的值,可依次指定字典名,用方括号扩起的键以及与该键相关联的新值




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

alien_0['color'] = 'yellow'
print ('the alien is now ' + alien_0['color'] + '.')

删除键值对

对于字典中不再需要的信息,可以使用del语句将相应的键值对彻底删除,使用del语句时,必须指定字典名和要删除的键

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

由类似对象组成的字典

前面的例子中,字典储存的是一个对象,你可以使用字典来储存众多对象的同一种信息

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
}
print ('sarah is favorite language is ' + favorite_languages['sarah'].title() + '.')

练习测试

  1. 人:使用一个字典来存储一个熟人的信息,包括名、姓、年龄和居住的城市。该字典应包含键first_name、last_name、age和city。将存储在该字典中的每项信息都打印出来。

  2. 喜欢的数字:使用一个字典来存储一些人喜欢的数字。请想出5个人的名字,并将这些名字用作字典中的键;想出每个人喜欢的一个数字,并将这些数字作为值存储在字典中。打印每个人的名字和喜欢的数字。为让这个程序更有趣,通过询问朋友确保数据是真实的。

  3. 词汇表:Python字典可用于模拟现实生活中的字典,但为避免混淆,我们将后者称为词汇表。

  • 想出你在前面学过的5个编程词汇,将它们用作词汇表中的键,并将它们的含义作为值存储在词汇表中。

  • 以整洁的方式打印每个词汇及其含义。为此,你可以先打印词汇,在它后面加上一个冒号,再打印词汇的含义;也可在一行打印词汇,再使用换行符(\n)插入一个空行,然后在下一行以缩进的方式打印词汇的含义。

练习结果

  1. pepole.py

    f = {'first_name':'yang','last_name':'wei','age':'32','city':'beijing'}
    fname = f['first_name']
    lname = f['last_name']
    age = f['age']
    city = f['city']
    print('\n'+ fname + '\n' + lname + '\n' + age + '\n' + city)
  2. likenum.py

    
    
    
        
    ln = {'name1':'1','name2':'2','name3':'3','name4':'4','name5':'5'}
    print ( 'name1 do u like ? ' + ln['name1'])
    print ( 'name2 do u like ? ' + ln['name2'])
    print ( 'name3 do u like ? ' + ln['name3'])
    print ( 'name4 do u like ? ' + ln['name4'])
    print ( 'name5 do u like ? ' + ln['name5'])
  3. word.py

    word = {'print':'print.is.word...','len':'sum is list is long'}
    print ('print = : ' + word['print'])
    print ('len = : ' + word['len'])

遍历字典

一个Python字典可能只包含几个键值对,也可能包含数百万个键值对.鉴于字典可能包含大量的数据,Python支持对字典的遍历。

遍历所有的键值对

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

{% note danger %}
items() 方法, 他返回一个键值对的列表
{% endnote %}

for k,v in 列表.items(): 对于字典的for循环,可声明两个变量用于储存键值对中的键和值.接下来用包含字典名和方法items(),它返回一个键值对列表.接下来for循环依次将每个键值对储存到指定的两个变量中.

favorite_languages.py

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

遍历字典中所有的键

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

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
}
for name in favorite_languages.keys():
    print(name.title())

{% note danger %}
keys() 方法. 用于遍历字典中的所有
{% endnote %}

遍历字典中所有的值

如果提取字典中所包含的 , 可以使用方法values()

favorite_languages = {
    'jen':'python',
    'sarah':'c',
    'edward':'ruby',
    'phil':'python',
}
for language in favorite_languages.values():
    print (language.title())

{% note danger %}
value() 方法. 用于遍历字典中的所有
{% endnote %}

练习测试

  1. 词汇表2:既然你知道了如何遍历字典,现在请整理你为完成练习6-3而编写的代码,将其中的一系列print语句替换为一个遍历字典中的键和值的循环。确定该循环正确无误后,再在词汇表中添加5个Python术语。当你再次运行这个程序时,这些新术语及其含义将自动包含在输出中。

  2. 河流:创建一个字典,在其中存储三条大河流及其流经的国家。其中一个键—值对可能是'nile':'egypt'。

  • 使用循环为每条河流打印一条消息,如“TheNilerunsthroughEgypt.”

  • 使用循环将该字典中每条河流的名字都打印出来。

  • 使用循环将该字典包含的每个国家的名字都打印出来。

  • 调查:在6.3.1节编写的程序favorite_languages.py中执行以下操作。

    • 创建一个应该会接受调查的人员名单,其中有些人已包含在字典中,而其他人未包含在字典中。

    • 遍历这个人员名单,对于已参与调查的人,打印一条消息表示感谢。对于还未参与调查的人,打印一条消息邀请他参与调查。

    练习结果

    1. word.py

      word = {
      'print':'print.is.word...',
      'len':'sum is list is long'
      }
      for k,v in word.items():
          print (k + ':' + v)
    2. rever.py

      
      
      
          
      rever = {
          'china':'huanghe',
          'china':'changjiang',
          'meiguo':'buzhidao',
          'nile':'egypt',
      }
      for c,r in rever.items():
          print ('the '+ c + 'runs through '+ r + '.')

      for r in rever.values():
          print (r)

      for c in rever.keys():
          print (c)
    3. favorite_languages.py

      favorite_languages = {
          'jen''python',
          'sarah''c',
          'edward''ruby',
          'phil''python',
          }
      pepole = ['jen', 'sarah']
      for i in pepole:
          if i in favorite_languages.keys():
              print ('thank ' ,i)

    嵌套

    有时候,需要将一系列字典储存在列表中,或将列表作为值储存在字典中,这称之为嵌套

    字典列表

    字典alien_0包含一个外星人的全部信息,但无法储存第二个外星人的信息,那么如何管理城区阶段的外星人呢,一种办法是创建一个外星人列表,其中每个外星人都是一个字典,包含该外星人的各种信息,下面的代码创建一个包含三个外星人的列表

    aliens.py

    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 i in aliens:
        print (i)
    {'color''green''points'
    
    
        
    : 5}
    {'color''yellow''points': 10}
    {'color''red''points': 15}

    下面使用range()函数生成30个外星人:

    aliens = []
    for i in range(30):
        new = {'color':'green','points':5,'speed':'slow'}
        aliens.append(new)
    print(aliens)
    for alien in aliens[:5]:
        print(alien)
    print('...')
    print ('sum = ' + str(len(aliens)))
    {'color''green''points'5'speed''slow'}
    {'color''green''points'5 'speed''slow'}
    {'color''green''points'5'speed''slow'}
    {'color''green''points'5'speed''slow'}
    {'color''green''points'5'speed''slow'}
    ...

    在字典中储存列表

    有时候,需要将列表储存在字典中,而不是将字典储存在列表中

    pizza.py

    pizza = {
        'crust':'thick',
        'toppings':['mushrooms','extra cheese'],
    }
    print ('you ordered a ' + pizza['crust'] + "-crust pizza  with the following toppings: ")

    for topping in  pizza['toppings']:
        print('\t' + topping)
    you ordered a thick-crust pizza  with the following toppings:
            mushrooms
            extra cheese

    练习测试

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

    2. 宠物:创建多个字典,对于每个字典,都使用一个宠物的名称来给它命名;在每个字典中,包含宠物的类型及其主人的名字。将这些字典存储在一个名为pets的列表中,再遍历该列表,并将宠物的所有信息都打印出来。

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

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

    5. 城市:创建一个名为cities的字典,其中将三个城市名用作键;对于每座城市,都创建一个字典,并在其中包含该城市所属的国家、人口约数以及一个有关该城市的事实。在表示每座城市的字典中,应包含country、population和fact等键。将每座城市的名字以及有关它们的信息都打印出来。

    6. 扩展:本章的示例足够复杂,可以以很多方式进行扩展了。请对本章的一个示例进行扩展:添加键和值、调整程序要解决的问题或改进输出的格式。

    练习结果

    1. people.py

      people = []
      people_1 = {'name':'user1','sex':'F'}
      people_2 = {'name':'user2','sex':'M'}
      people_3 = {'name':'user3','sex':'F'}
      people = [people_1,people_2,people_3]
      for i in people:
          print(i)
    2. pet.py

      
      
      
          
      pet_1 = {'pet':'pet1','master':'user1'}
      pet_2 = {'pet':'pet2','master':'user2'}
      pet_3 = {'pet':'pet3','master':'user3'}
      pets = [pet_1,pet_2,pet_3]
      for d in pets:
          print (d['pet'])
    3. like.py

      favorite_places = {
          'name1':['like1','like2','like3'],
          'name2':['like4','like5','like6'],
          'name3':['like7','like8','like9'],
      }
      for name,like in favorite_places.items():
          print('\n' + name + ' like this ')
          for i in like:
               print ('\t\t'+i)
    4. likenum.py

      favorite_places = {
          'name1':['like1','like2','like3'],
          'name2':['like4','like5','like6'],
          'name3':['like7','like8','like9'],
      }
      for name,like in favorite_places.items():
          print('\n' + name + ' like this ')
          for i in like:
              print ('\t\t'+i)
    5. city.py

      cities = {
          'beijing':{'city':'beijing','renkou':'100'},
          'chongqing':{'city':'chongqing','renkou':'200'},
          'shanghai':{'city':'shanghai','renkou':'200'},
          }
      for x,y in cities.items():
          for i,ii in y.items():
              print ('chengshi: ' + str(x) +' city: ' + i + ' renkuo: ' + ii )


    zhi

     支

    chi

     持

    zuo

     作

    zhe

     者



    长按扫码鼓励作者

    点 击 投 稿


    热 门 推 荐

    为你的Python程序加密

    爬取豆瓣电影榜单构建知识图谱

    用Python分析《都挺好》中的人物关系

    用Pandas库实现MySQL数据库的读写

    推荐Python中文社区旗下的几个服务类公众号

    ▼ 点击成为社区注册会员          「在看」一下,一起PY!

    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/31530
     
    575 次点击