• Python学习5——字典(dict)


    字典是python中的映射类型,是一种“键值对”(key-value)数据结构。

    key是任意不可变的类型对象,通常是字符串和数字,不能是list(list可以改变)。

    value可以是任何类型的数据。

    字典可以通过dict()和一对花括号创建一个空字典(d={}),花括号内键值对用(:)隔开,多个键值对之间用(,)隔开。

    创建空字典:

    >>> d = {}
    
    >>> d
    
    {}
    
    >>> d1 = dict()
    
    >>> d1
    
    {}
    
    >>> d1 == d
    
    True

    可以通过传入参数进行初始化。

    传入参数有两种形式:一种是,序列型数据list或tuple,它每个元素必须又含有两个子元素,以满足key-value对;一种是,name=value形式的参数。

    >>> d = {'a':1,'b':2,'c':3}
    
    >>> d
    
    {'a': 1, 'b': 2, 'c': 3}
    
    >>> d1 = dict(a=1,b=2,c=3)    #name=value形式的参数
    
    >>> d1
    
    {'a': 1, 'b': 2, 'c': 3}
    
    >>> d2 = dict([('a',1),('b',2)])
    
    >>> d2
    
    {'a': 1, 'b': 2}

    用for循环创建一个字典:

    >>> dd = {x:x+x for x in range(5)}
    
    >>> dd
    
    {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}

    list可以做value,但不能做key

    >>> d = {'a':[1,2,3]}
    
    >>> d
    
    {'a': [1, 2, 3]}
    
    >>> d1 = {[1,2,3],'a'}
    
    Traceback (most recent call last):
    
      File "<pyshell#25>", line 1, in <module>
    
        d1 = {[1,2,3],'a'}
    
    TypeError: unhashable type: 'list'

    字典通过键访问值,有2种方式:

    >>> d = dict(a=1,b=2,c=3)
    
    >>> d
    
    {'a': 1, 'b': 2, 'c': 3}
    
    >>> d['b']       #通过‘b’访问到值
    
    2
    
    >>> d.get('a')    #通过get(key)方法访问值
    
    1
    
    >>> d['c']=5
    
    >>> d
    
    {'a': 1, 'b': 2, 'c': 5}

    字典的变更

    >>> d = dict(a=1,b=2,c=3)
    
    >>> d
    
    {'a': 1, 'b': 2, 'c': 3}
    
    >>> d['b']=5    #修改某个键的值
    
    >>> d
    
    {'a': 1, 'b': 5, 'c': 3}
    
    >>> d['d']=7        #新增一个键值对
    
    >>> d
    
    {'a': 1, 'b': 5, 'c': 3, 'd': 7}
    
    >>> del d['a']        #删除某个键值对
    
    >>> d
    
    {'b': 5, 'c': 3, 'd': 7}

    sorted()把字典的所有key当做一个列表(或元组)进行排序

    >>> d = dict(a=1,b=2,c=3,d=4)
    
    >>> d
    
    {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    
    >>> sorted(d)
    
    ['a', 'b', 'c', 'd']

    遍历key:

    >>> for key in d:
    
    print(key)
    
     
    
     
    
    a
    
    b
    
    c
    
    d

    clear()可以清空一个字典:

    fromkeys()通过一个序列来初始化字典:

    >>> d={}
    
    >>> d.fromkeys([1,2,3])
    
    {1: None, 2: None, 3: None}
    
    >>> d.fromkeys([1,2,3],1)
    
    {1: 1, 2: 1, 3: 1}

    update()用一个字典来更新另一字典:

    >>> x = d.fromkeys([1,2,3])
    
    >>> x
    
    {1: None, 2: None, 3: None}
    
    >>> x.update({1:'a',2:'b'})
    
    >>> x
    
    {1: 'a', 2: 'b', 3: None}

    将字符串格式设置功能用于字典——format_map

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

    copy方法返回一个新字典,这个方法执行的是浅复制,因为值本身就是原件。

    >>> x = {'username':'admin','abc':['foo','bar','baz']}
    
    >>> y = x.copy()
    
    >>> y
    
    {'username': 'admin', 'abc': ['foo', 'bar', 'baz']}
    
    >>> y['abc'].remove('bar')
    
    >>> y['username']='admin123'
    
    >>> y
    
    {'username': 'admin123', 'abc': ['foo', 'baz']}
    
    >>> x
    
    {'username': 'admin', 'abc': ['foo', 'baz']}

    浅复制,当替换副本中的值时,原件不受影响(‘username’对应的值)。但是修改副本中的值,原件也将发生变化(‘abc’列表变化)。
    为避免上面的情况,可以执行深复制。即同时复制值及其包含的所有值。

    >>> from copy import deepcopy
    
    >>> d = {}
    
    >>> d['names'] = ['alfred','bertrand']
    
    >>> c = d.copy()
    
    >>> e = deepcopy(d)
    
    >>> d['names'].append('clive')
    
    >>> c
    
    {'names': ['alfred', 'bertrand', 'clive']}
    
    >>> e
    
    {'names': ['alfred', 'bertrand']}
  • 相关阅读:
    Oracle EBS 技术顾问常用的PL/SQL工具
    ORACLE EBS 计划功能 理论整理
    Oracle SQL 空值排序(Nulls)
    Oracle数据库中表的四种连接方式讲解
    JVM学习笔记之CodeCache
    Java序列化的作用和反序列化
    Spring MVC framework深入分析之一总体分析
    SpringMVC 拦截器实现分析
    Spring MVC framework深入分析之三执行过程
    Ajax应用开发:实践者指南
  • 原文地址:https://www.cnblogs.com/suancaipaofan/p/11069081.html
Copyright © 2020-2023  润新知