zoukankan      html  css  js  c++  java
  • python随笔5(字典)

    5.1一个简单的字典

    下面是一个简单的字典,存储了有关特定外星人的信息:

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

    5.2使用字典

    在python中,字典是一系列 键—值 对。每一个键都与一个值相关联,你可以使用键访问与之相关联的值。与键相关联的值可以是数字,字符串,列表乃至字典。事实上,可以将任何python对象作用字典中的值。

    在python中,字典用放在花括号{}中的一系列键—值对表示。

    键—值对是两个相关联的值。指定键时,python将返回与之相关联的值,键和值之间用冒号分隔,而键—值对之间用逗号分隔。

    访问字典中的值

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

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

    这将返回字典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中添加两项信息:外星人的x坐标和y坐标,让我们能够在屏幕的特定位置显示外星人。我们将这个外星人放在屏幕左边缘,且离屏幕上边缘25像素的地方。由于屏幕坐标系的原点通常为左上角,因此要将该外星人放在屏幕左边缘,可将x坐标设置为0;要将该外星人放在离屏幕顶部25像素的地方,可将y坐标设置为25。

    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}

    python不关心键—值对的添加顺序,而只关心键和值之间的关联关系。

    先创建一个空字典

    可先使用一对空的花括号定义一个字典,再分行添加各个键—值对。

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

    使用字典来存储用户提供的数据或在编写能自动生成大量键—值对的代码时,通常都需要先定义一个空字典。

    修改字典中的值

    要修改字典中的值,可依次指定字典名,用方括号括起的键以及与该键相关联的新值。例如,将一个外星人从绿色改成黄色。

    alien_0 = {'color':'green'}
    print("The alien is " + alien_0['color'] + ".")
    alien_0['color'] = 'yellow'
    print("The alien is now " + alien_0['color'] + ".")

    看一个更有趣的例子:对一个能够以不同速度移动的外星人的位置进行跟踪。为此,我们将储存该外星人的当前速度,并据此确定该外星人向右移动多远。

    alien_0 = {'x_position':0,'y_position':25,'speed':'medium'}
    print("Original x-position: " + str(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("New x-position: " + str(alien_0['x_position']))

    删除键—值对

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

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

    删除的键—值对永远消失了。

    5.3遍历字典

    遍历所有的键—值对

    下面字典存储一名用户的用户名,名和姓。

    user_0 = {
        'username':'efermi',
        'first':'enrico',
        'last':'fermi'
    }

    可以用一个for循环来遍历这个字典。

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

    要编写用于遍历字典的for循环,可声明两个变量,用来存储键—值对中的键和值。对于这两个变量,可以是任何名称。for语句的第二部分包含字典名和方法items(),它返回一个键—值对列表。接下来,for循环依次将每个键—值对存储到指定的两个变量中。【items() 函数以列表返回可遍历的(键, 值) 元组数组。】

    key: username
    Value: efermi
    
    key: last
    Value: fermi
    
    key: first
    Value: enrico

    遍历字典中的所有键

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

    user_0 = {
        'username':'efermi',
        'first':'enrico',
        'last':'fermi'
    }
    for key in user_0.keys():
        print(key.title())

    遍历字典时,会默认遍历所有的键。因此将上述代码中的 for key in user_0.key() 替换成 for key in user_0,输出结果将不变。

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

    获取字典的元素时,获取顺序是不可预测的。要以特定的顺序返回元素,一种方法是在for循环中对返回的键进行排序。为此,可使用函数sorted()来获得按特定顺序排列的键列表的副本:

    favorite_languages = {
        'jen':'python',
        'sarah':'c',
        'edward':'ruby',
        'phil':'python'
    }
    for name in sorted(favorite_languages.keys()):
        print(name.title()+",thank you for taking the poll.")
    Edward,thank you for taking the poll.
    Jen,thank you for taking the poll.
    Phil,thank you for taking the poll.
    Sarah,thank you for taking the poll.

    遍历字典中的所有值

    如果你感兴趣的主要是字典包含的值,可以使用方法values(),它返回一个值列表,而不包含任何键。例如,我们想获取一个这样的列表,只含被调查者选择的各种语言,而不包含被调查者的名字:

    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())
    The following languages have been mentioned:
    C
    Ruby
    Python
    Python

    这种做法提取字典中的值,没有考虑是否重复。为剔除重复项,可使用集合(set)。集合类似于列表,但每个元素都必须是独一无二的:

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

    5.4嵌套

    有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。你可以在列表中嵌套字典,在字典中嵌套列表甚至在字典中嵌套字典。

    字典列表

    字典alien_0包含之歌外星人的各种信息,但无法存储第二个外星人的信息。如何管理成群结队的外星人呢?一种办法是创建一个外星人列表,其中每个外星人都是一个字典,包含有关外星人的各种信息。例如:

    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)

    我们首先创建了三个字典,其中每个字典都表示一个外星人。我们遍历这个列表,并将每个外星人都打印出来

    {'color': 'green', 'points': 5}
    {'color': 'yellow', 'points': 10}
    {'color': 'red', 'points': 15}

    更符合现实的情形是,外星人不止三个,且每个外星人都是使用代码自动生成的。在下面示例中我们使用range()生成了30个外星人。

    aliens = [] #创建一个用于存储外星人的空列表
    
    for alien_number in range(30):
        new_alien = {'color':'green','points':5,'speed':'slow'}
        aliens.append(new_alien)
    
    for alien in aliens[:5]: #打印前5个
        print(alien)
    print('...')
    
    #显示创建了多少个外星人
    print("Total number of aliens:" + str(len(aliens)))

    首先创建了一个空列表,用于存储接下来将要创建的所有外星人。range()返回一系列数字,其唯一的用途是告诉python我们要重复这个循环多少次。每执行一个循环,都要创建一个外星人并将其附加到列表aliens末尾。使用一个切片来打印前5个外星人。

    {'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'}
    ...
    Total number of aliens:30

    我们可以使用for循环和if语句来修改某些外星人的颜色。例如,将钱三个外星人修改为黄色的,速度为中等且值10个点。

    aliens = [] #创建一个用于存储外星人的空列表
    
    for alien_number in range(30):
        new_alien = {'color':'green','points':5,'speed':'slow'}
        aliens.append(new_alien)
        
    for alien in aliens[0:3]:
        if alien['color'] == 'green':
            alien['color'] = 'yellow',
            alien['speed'] = 'medium',
            alien['points'] = 10
    
    for alien in aliens[:5]: #打印前5个
        print(alien)
    print('...')
    
    #显示创建了多少个外星人
    print("Total number of aliens:" + str(len(aliens)))
    {'color': ('yellow',), 'points': 10, 'speed': ('medium',)}
    {'color': ('yellow',), 'points': 10, 'speed': ('medium',)}
    {'color': ('yellow',), 'points': 10, 'speed': ('medium',)}
    {'color': 'green', 'points': 5, 'speed': 'slow'}
    {'color': 'green', 'points': 5, 'speed': 'slow'}
    ...
    Total number of aliens:30

    你可以进一步扩展这个循环,在其中添加一个elif代码块,将黄色外星人改为移动速度快且值15个点的红色外星人。

    aliens = [] #创建一个用于存储外星人的空列表
    
    for alien_number in range(30):
        new_alien = {'color':'green','points':5,'speed':'slow'}
        aliens.append(new_alien)
    
    for alien in aliens[0: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
    
    for alien in aliens[:5]: #打印前5个
        print(alien)
    print('...')
    
    #显示创建了多少个外星人
    print("Total number of aliens:" + str(len(aliens)))
    {'color': ('yellow',), 'points': 10, 'speed': ('medium',)}
    {'color': ('yellow',), 'points': 10, 'speed': ('medium',)}
    {'color': ('yellow',), 'points': 10, 'speed': ('medium',)}
    {'color': 'green', 'points': 5, 'speed': 'slow'}
    {'color': 'green', 'points': 5, 'speed': 'slow'}
    ...
    Total number of aliens:30

    在字典中存储列表

    有时候,需要将列表存储在字典中,而不是将字典存储在列表中。例如,你如何描述顾客点的披萨呢?如果使用列表,只能存储要添加的披萨的配料;但如果使用字典,就不仅可在其中包含配料列表,还可包含其他有关披萨的描述。在下列实例中,存储了披萨的两方面信息:我们使用字典名和键’toppings’,就像访问字典中的其他值一样。这将放回一个配料列表。

    #存储所点披萨信息
    pizza = {
        'crust':'thick',
        'toppings':['mushrooms','extra cheese'],
    }
    #概述所点的披萨
    print("You orderd a " + pizza['crust'] + "-crust pizza " +
          "with the following toppings:")
    
    for topping in pizza['toppings']:
        print("	" + topping)

    我们首先创建了一个字典,其中存储了有关顾客点的披萨的信息。在这个字典中,一个键是’crust’,与之相关联的值是字符串’thick’;下一个键是’toppings’,与之相关联的值是一个列表,其中存储了顾客要求添加的所有配料。

    You orderd a thick-crust pizza with the following toppings:
        mushrooms
        extra cheese

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

    在字典中存储字典

    可在字典中嵌套字典,不过代码可能很快会复杂起来。例如,如果有多个网站用户,每个用户都有独特的名字,可在字典中将用户名作为键,然后每位用户的信息存储在一个字典中,并将该字典作为与用户相关联的值。在下面程序中,对于每个用户,我们都存储了其三项信息:名/姓/居住地;为访问这些信息,我们遍历所有的用户名,并访问与每个用户名相关联的信息字典:

    users = {
        'aeinstein':{
            'first':'albert',
            'last':'einstein',
            'location':'princeton',
            },
        'mcutie':{
            'first':'marie',
            'last':'curie',
            'location':'paris',
        },
    }
    for username,user_info in users.items():
        print("
    Username: " + username)
        full_name = user_info['first'] + " " + user_info['last']
        location = user_info['location']
    
    print("	Full name: " + full_name.title())
    print("	location: " + location.title())

    我们首先定义一个名为users的字典,其中包含两个键:用户名’aeinstern’和’mcurie’;与每一个键相关联的值都是一个字典,其中包含用户的名,姓和居住地。

    Username: aeinstein
    
    Username: mcutie
        Full name: Marie Curie
        location: Paris
  • 相关阅读:
    潜入ICU的四逆汤
    经方医的视角
    黄连解毒汤治疗月经过多
    柳暗花明又一方
    PHP 相关性系数计算
    备忘-VSCODE、apache配置
    c# 基于文件系统实现的队列处理类
    notepad++ 快速运行PHP代码
    dat.gui stats.js 通用参数配置及图像统计工具
    AutoHotkey 自动化脚本工具实例
  • 原文地址:https://www.cnblogs.com/wf1017/p/9393461.html
Copyright © 2011-2022 走看看