zoukankan      html  css  js  c++  java
  • python3入门之字典

    获得更多资料欢迎进入我的网站或者 csdn或者博客园

    本节主要介绍字典,字典也成映射,时python中唯一内建的映射类型。更多详细请点击readmore。下面附有之前的文章;

    python入门之字符串
    python入门之列表和元组
    python入门之软件安装

    字典的介绍与作用

    在元组和列表中,都是通过编号进行元素的访问,但有的时候我们按名字进行数据甚至数据结构的访问,在c++和java中有map的概念,也就是映射。同样在python中也提供了内置的映射类型--字典。映射其实就是一组键(key)和值(value)以及之间的映射函数。键可以是数字、字符串甚至是元组。
    字典类型与序列类型的区别:
    1.存取和访问数据的方式不同。
    2.序列类型只用数字类型的键(从序列的开始按数值顺序索引);
    3.映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同.
    4.映射类型的键直接或间接地和存储数据值相关联。
    5.映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。
    6.映射类型用键直接“映射”到值。

    创建字典

    简单地说字典就是用大括号包裹的键值对的集合。
    1可以通过一下方式创建:
    字典由多个键及与其对应的值构成的对组成。每个键和它的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典是由一对大括号括起来。
    字典中的键必须是唯一的,而值可以不唯一。

    >>> student_id={'peace':'201421014960','nick_peace':'201421014970','nicl_peace2':'201421014980'}
    >>> student_id
    {'peace': '201421014960', 'nicl_peace2': '201421014980', 'nick_peace': '201421014970'}
    >>> student_id['peace']
    '201421014960'
    

    2可以通过dict函数创建
    用 dict 函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。

    #通过序列创建
    >>> items=[('peace','201421014960'),('nick_peace','201421014970')]
    >>> student_id=dict(items)
    >>> student_id['nick_peace']
    '201421014970'
    >>> 
    #也可以通过关键字参数来创建
    >>> student_id=dict(peace='201421014960',age=23)
    >>> student_id
    {'age': 23, 'peace': '201421014960'}
    >>> 
    

    字典基本操作

    字典的基本行为在很多方面与序列类似:

    (1)len(d) 返回 d 中项(键-值对)的数量
    (2)d[k] 返回关联到键 k 上的值
    (3)d[k] = v 将值 v 关联到键 k 上
    (4)del d[k] 删除键为 k 的项
    (5)k in d 检查 d 中是否有含有键为 k 的项

    >>> student_id={'peace':'201421014960','nick_peace':'201421014970','nicl_peace2':'201421014980'}
    >>> len(student_id)
    3
    >>> student_id['nick_peace']
    '201421014970'
    >>> student_id['nick_peace']=2014
    >>> student_id
    {'peace': '201421014960', 'nicl_peace2': '201421014980', 'nick_peace': 2014}
    >>> del student_id['nick_peace']
    >>> student_id
    {'peace': '201421014960', 'nicl_peace2': '201421014980'}
    >>> 'peace' in student_id
    True
    >>> 'nick_peace' in student_id
    False
    

    注意:

    尽管字典和列表有很多特性相同,但也有下面一些重要的区别。
    (1)键类型:字典的键不一定为整型数据(但也可能是),也可能是其他不可变类型,比如浮点型(实型)、字符串或者元组。
    (2)自动添加:即使那个键起初在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项。
    (3)成员资格:表达式 k in d (d 为字典) 查找的是键,而不是值。
    例如:

    >>> item=[]
    >>> item[1]=23
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list assignment index out of range
    >>> item={}
    >>> item[1]=23
    >>> item
    {1: 23}
    >>> 
    

    字典的格式化字符串

    在每个转换(conversion specifier)中的 % 字符后面,可以加上用圆括号括起来的键,后面再跟上其他说明元素。

    >>> student_id={'peace':'201421014960','nick_peace':'201421014970','nicl_peace2':'201421014980'}
    >>> "peace's student id is %(peace)s." % student_id
    "peace's student id is 201421014960."
    >>> 
    

    只要所有给出的键都能在字典中找到,就可以获得任意数量的转换说明符。这类字符串格式化在模板系统中非常有用:

    >>> template = '''<html> 
    ... ... <head><title>%(title)s</title></head> 
    ... ... <body> 
    ... ... <h1>%(title)s</h1> 
    ... ... <p>%(text)s</p> 
    ... ... </body>'''
    >>> data = {'title':'My Home Page', 'text':'Welcome to my home page!'} 
    >>> print(template % data)  
    <html> 
    ... <head><title>My Home Page</title></head> 
    ... <body> 
    ... <h1>My Home Page</h1> 
    ... <p>Welcome to my home page!</p> 
    ... </body>
    >>> 
    

    字典方法

    就像其他内建类型一样,字典也有方法,这些方法非常有用;下面对一些方法进行讲解

    clear方法

    clear 方法清除字典中所有的项。这是个原地操作,所以无返回值(或者说返回 None)。

    >>> student_id={'peace':'201421014960','nick_peace':'201421014970','nicl_peace2':'201421014980'}
    >>> student_id.clear()
    >>> student_id
    {}
    >>> 
    
    
    

    copy方法

    copy 方法返回一个具有相同键-值对的新字典(这个方法实现的是浅复制(shallow copy),因为值本身就是相同的,而不是副本)。

    >>> student_id={'peace':'201421014960','nick_peace':'201421014970','pp':['p1','p2','p3']}
    >>> stucopy=student_id.copy()
    >>> stucopy['peace']='22222'
    >>> stucopy['pp'].remove('p2')
    >>> stucopy
    {'peace': '22222', 'nick_peace': '201421014970', 'pp': ['p1', 'p3']}
    >>> student_id
    {'peace': '201421014960', 'pp': ['p1', 'p3'], 'nick_peace': '201421014970'}
    >>> 
    

    上面,当在 y 中替换值的时候,x 不受影响,但是,如果修改了某个值(原地修改,而不是替换),x 也会改变,因为同样的值也存储在原字典中。
    避免这个问题的一种方法就是使用深复制( deep copy),复制其包含所有的值。可以使用 copy 模块的 deepcopy 函数来完成操作。

    >>> from copy import deepcopy
    >>> student_id={'peace':'201421014960','nick_peace':'201421014970','pp':['p1','p2','p3']}
    >>> stucopy=deepcopy(student_id)
    >>> stucopy['peace']='22222'
    >>> stucopy['pp'].remove('p2')
    >>> stucopy
    {'peace': '22222', 'nick_peace': '201421014970', 'pp': ['p1', 'p3']}
    >>> student_id
    {'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
    
    

    fromkeys方法

    fromkeys 方法使用给定的键建立新的字典,每个键默认对应的值为 None。

    #空字典建立
    >>> {}.fromkeys(['peace','nixk'])
    {'peace': None, 'nixk': None}
    #直接在所有字典的类型 dict 上面调用方法
    >>> dict.fromkeys(['peace','nixk'])
    {'peace': None, 'nixk': None}
    #不想使用None作为默认值,也可以自己提供默认值。
    >>> dict.fromkeys(['peace','nixk'],'(handsome)')
    {'peace': '(handsome)', 'nixk': '(handsome)'}
    

    get方法

    get方法和的d[key]类似

    #当使用 get 访问一个不存在的键时,没有任何异常,而得到了 None 值。
    >>> student_id
    {'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
    >>> print(student_id['pp'])
    ['p1', 'p2', 'p3']
    >>> print(student_id['pp1'])
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyError: 'pp1'
    >>> print(student_id.get('pp1'))
    None
    #可以定义“默认”返回值,替换 None:
    >>> print(student_id.get('pp1','N/A'))
    N/A
    #如果键存在,get用起来就像普通的字典查询一样。
    >>> print(student_id.get('pp','N/A'))
    ['p1', 'p2', 'p3']
    >>> 
    

    items方法

    items 方法将所有的字典项以dict_items 方式返回,这些列表项中的每一项都来自于(键,值)

    >>> student_id
    {'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
    >>> student_id.items()
    dict_items([('peace', '201421014960'), ('pp', ['p1', 'p2', 'p3']), ('nick_peace', '201421014970')])
    

    keys方法

    keys 方法将字典中的键以 dict_keys 形式返回。

    >>> student_id
    {'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
    >>> student_id.keys()
    dict_keys(['peace', 'pp', 'nick_peace'])
    >>> 
    
    

    pop方法和popitem

    pop 方法用来获得对应于给定键的值,然后将这个键-值对从字典中移除。

    >>> student_id
    {'peace': '201421014960', 'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
    >>> student_id.pop('peace')
    '201421014960'
    >>> student_id
    {'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
    >>> 
    

    popitem 弹出随机的项和将这个键-值对从字典中移除。

    >>> student_id
    {'pp': ['p1', 'p2', 'p3'], 'nick_peace': '201421014970'}
    >>> student_id.popitem()
    ('pp', ['p1', 'p2', 'p3'])
    >>> student_id.popitem()
    ('nick_peace', '201421014970')
    >>> student_id
    {}
    >>> 
    

    setdefaut方法

    setdefault 方法在某种程度上类似于 get 方法,就是能够获得与给定键相关联的值,除此之外,setdefault 还能在字典中不含有给定键的情况下设定相应的键值。当键不存在的时候,setdefault 返回默认值并且相应地更新字典。如果键存在,那么就返回与其相应的值,但不改变字典。

    >>> d = {}
    >>> d.setdefault('name', 'N/A')
    'N/A'
    >>> d
    {'name': 'N/A'}
    >>> d['name'] = 'Gumby'
    >>> d.setdefault('name', 'N/A')
    'Gumby'
    >>> d
    {'name': 'Gumby'}
    

    update方法

    update 方法可以利用一个字典项更新另一个字典。

    >>> d={'peace':'2222222',"pp":111}
    >>> x={'peace':'201421014960'}
    >>> d.update(x)
    >>> d
    {'peace': '201421014960', 'pp': 111}
    >>> 
    

    value方法

    values 方法以 dict_values 的形式返回字典中的值。

    >>> d
    {'peace': '201421014960', 'pp': 111}
    >>> d.values()
    dict_values(['201421014960', 111])
    >>> 
    

    字典的遍历

    遍历字典的值

    for value in adict.values():

    >>> d
    {'1': 2, '3': 4, '5': 6}
    >>> for i in d.values():print(str(i)) 
    ... 
    2
    4
    6
    >>> 
    

    遍历字典的键

    for key in adict.keys():

    >>> d
    {'1': 2, '3': 4, '5': 6}
    >>> for i in d:print(str(i)) 
    ... 
    1
    3
    5
    >>> for i in d.keys():print(str(i)) 
    ... 
    1
    3
    5
    >>> 
    

    遍历字典的项

    for item,value in adict.items():

    >>> d
    {'1': 2, '3': 4, '5': 6}
    >>> for key,values in d.items():print(str(key)+","+str(values))
    ... 
    1,2
    3,4
    5,6
    >>> 
    

    字典就讲到这里;

    相关链接:

    python3入门之类
    python3入门之函数
    python3入门之循环
    python3之if语句
    python3入门之赋值语句介绍
    python3入门之print,import,input介绍
    python3入门之set
    python3入门之字典
    python3入门之字符串
    python3入门之列表和元组
    python3入门之软件安装
    python3爬虫之入门和正则表达式

  • 相关阅读:
    构建之法阅读心得(九)
    构建之法阅读心得(八)
    构建之法阅读心得(七)
    构建之法阅读心得(六)
    构建之法阅读心得(五)
    构建之法阅读心得(四)
    一组阶段小记之读构建之法(三)
    暑期学习总结
    软工综合实践 学习笔记02
    软工综合实践 学习笔记01
  • 原文地址:https://www.cnblogs.com/onepeace/p/4685824.html
Copyright © 2011-2022 走看看