美文网首页
《Python编程:从入门到实践》-4 字典

《Python编程:从入门到实践》-4 字典

作者: Yayamia | 来源:发表于2022-08-22 10:19 被阅读0次

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

    • 格式:dic = { 'key' : 'value' , 'key' : 'value' }
    • 要获取与键相关联的值,可依次指定字典名和放在方括号内的键,如下所示:
    >>> dic = {'color':'green','size':'1080x1080'}
    >>> dic['color']
    'green'
    >>> dic['x']=1
    >>> dic['y']=2
    >>> dic
    {'color': 'green', 'size': '1080x1080', 'x': 1, 'y': 2}
    >>> del dic['x']
    >>> dic
    {'color': 'green', 'size': '1080x1080', 'y': 2}
    
    • 字典中元素的排列顺序与定义时(添加顺序)相同
    • 使用del语句时,必须指定字典名和要删除的键
    • 多行字典格式:
    dic = {
        'a'=1,
        'b'=2,
        'c'=3,#一个不错的作法是,在最后一个键值对后面也加上逗号。为以后在下一行添加键值对做好准备。
    }
    

    获取值常用dic['x']这种方法,但可能会引发问题:如果指定的键不存在就会出错。此时可以使用get(),其第一个参数用于指定键,第二个参数为指定的键不存在时要返回的值,默认为None

    favorite_language = {
        'jen':'python',
        'sarah':'c',
        'edward':'ruby',
    }
    alex_lan = favorite_language.get('alex',"no alex's information")
    print(alex_lan)
    

    遍历字典

    • 遍历字典的所有键值对
    for user,language in favorite_language.items():
        print(f"\nname:{user}")
        print(f"value:{value}")
    
    name:jen
    value:10
    
    name:sarah
    value:10
    
    name:edward
    value:10
    
    favorite_language.items()
    dict_items([('jen', 'python'), ('sarah', 'c'), ('edward', 'ruby')])#用.items()可以返回键值对列表
    
    • 遍历字典的所有
    for user in favorite_language.keys():#其实for user in favorite_language:也可以,遍历字典时会默认遍历所有的键。但.keys()更易于理解
        print(user.title())
    
    favorite_language.keys()
    dict_keys(['jen', 'sarah', 'edward'])#返回的是一个列表
    
    • 遍历字典中所有的
    for lan in favorite_language.values():
        print(lan.title())
    

    这种提取字典中所有的值没有考虑是否重复。设计的值很少的时候,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量重复项。为剔除重复项,可使用集合(set)。集合中每个元素都必须是独一无二的。

    favorite_language['yaya'] = 'c'
    for lan in favorite_language.values():
        print(lan.title())
    
    Python
    C
    Ruby
    C
    
    for lan in set(favorite_language.values()):
        print(lan.title())
    
    Ruby
    Python
    C
    

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

    嵌套

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

    • 字典列表:将字典信息储存在列表中
    aliens = []
    for alien_number in range(30):#批量生成
        new_alien = {'color': 'green', 'point': 5, 'speed':'slow'}
        aliens.append(new_alien)
    for alien in aliens[:5]:
        print(alien)
    print("...")
    print(f"Total number of aliens: {len(aliens)}")
    
    {'color': 'green', 'point': 5, 'speed': 'slow'}
    {'color': 'green', 'point': 5, 'speed': 'slow'}
    {'color': 'green', 'point': 5, 'speed': 'slow'}
    {'color': 'green', 'point': 5, 'speed': 'slow'}
    {'color': 'green', 'point': 5, 'speed': 'slow'}
    ...
    Total number of aliens: 30
    

    也可修改生成的字典列表的信息

    for alien in aliens[:3]:
        if alien['color'] == 'green':
            alien['color'] = 'yellow'
            alien['speed'] = 'medium'
    for alien in aliens[:5]:
        print(alien)
    print("...")
    
    {'color': 'yellow', 'point': 5, 'speed': 'medium'}
    {'color': 'yellow', 'point': 5, 'speed': 'medium'}
    {'color': 'yellow', 'point': 5, 'speed': 'medium'}
    {'color': 'green', 'point': 5, 'speed': 'slow'}
    {'color': 'green', 'point': 5, 'speed': 'slow'}
    ...
    
    • 列表字典
      每当需要在字典中将一个键关联到多个值时,都可以再字典中嵌套一个列表。
    favorite_language = {
        'jen': ['python', 'java'],
        'sarah':'c',
        'edward': ['ruby','python','r']
    }
    
    for name, lans in favorite_language.items():
        if len(lans) == 1:
            print(f"\n{name}'s favorite languages is {lans}.")
        else:
            print(f"\n{name}'s favorite "
                  "languages are:")
            for lan in lans:
                print(f"\t{lan.title()}")
    
    jen's favorite languages are:
        Python
        Java
    
    sarah's favorite languages is c.
    
    edward's favorite languages are:
        Ruby
        Python
        R
    

    如果print()中需要打出来的字符串很长,可以在合适的位置分行,只需要分行前后都打上引号,除了第一行外其他各行都在行首加上引号并缩进,python将自动合并圆括号内的所有字符串。
    注意:列表和字典的嵌套层级不应该太多。如果嵌套太多,可能有更简单的解决防范。

    • 在字典中储存字典
      最好嵌套的字典具有相同的结构,这样处理起来会相对容易

    相关文章

      网友评论

          本文标题:《Python编程:从入门到实践》-4 字典

          本文链接:https://www.haomeiwen.com/subject/tchigrtx.html