美文网首页井英俱乐部
Python学习笔记之六-字典

Python学习笔记之六-字典

作者: 寒狼刺骨 | 来源:发表于2018-09-14 18:28 被阅读0次

    字典由 键(key) 及相对应的 值(value) 组成,每一个 键-值 对  称为项(item)。每个键与其值之间用冒号(:)分隔,项之间用逗号分隔。整个字典放在花括号内。如下:

    d = {'张三': 18, '李四': 21, '王五': 16, '赵六': 32}

    1,函数dict

    可用dict函数创建字典。比如:
    >>>database
    [['张三', 18], ['李四', 21], ['王五', 16], ['赵六', 32]]
    >>>d = dict(database)
    >>>d
    {'张三': 18, '李四': 21, '王五': 16, '赵六': 32}

    2,其他相关字典的函数和操作
        2.1 len 返回字典包含的项数
            >>>len(d)
            4
        2.2 d[key] 返回与键对应的值
            >>>d['王五']
            16
        2.3 d[key] = value 将值value关联到键key
            >>>d['王五'] = 66
            >>>d['王五']
            66
        2.4 del d[key] 删除键key的项
            >>>del d['王五']
            >>>d
            {'张三': 18, '李四': 21, '赵六': 32}
        2.5 key in d 检查字典d是否包含键为key的项
            >>>d
            {'张三': 18, '李四': 21, '赵六': 32}
            >>> '王五' in d
            False
            >>> '李四' in d
            True

    3,字典的方法
        3.1 clear 删除所有的字典项
            >>>d
            {'张三': 18, '李四': 21, '王五': 16, '赵六': 32}
            >>>d.clear()
            >>>d
            {}

            #clear和赋空值区别
            >>>d
            {'张三': 18, '李四': 21, '王五': 16, '赵六': 32}
            >>>c = d
            >>>c
            {'张三': 18, '李四': 21, '王五': 16, '赵六': 32}

            >>>d = {}   #若不使用clear
            >>>d
            {}
            >>>c
            {'张三': 18, '李四': 21, '王五': 16, '赵六': 32}

            >>> d.clear() #若使用clear
            >>>d
            {}
            >>>c
            {}

            #哥的八卦猜想:类似指针,d和c指针都指向同一字典,用等号给字典某一项的值value赋值,字典可改变(比如 d['李四'] = 222),d和c一样还是指向同一指针。如果直接给字典c或d赋空字典{} 意味着c或d指针指向一个空字典,原字典没有变化。用clear等于清空原字典。

        3.2 copy 返回一个新字典,字典各项与原来字典相同(这种方法执行的是浅复制,因为值本身是原件,而非副本)

            >>>x = {'姓名':'张三','选修课': ['美术','音乐','舞蹈']}
            >>>y = x.copy()
            >>>y
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}

            #如果用替换副本中的值,原件不受影响
            >>>y['姓名'] = '李四'
            >>>y
            {'姓名': '李四', '选修课': ['美术', '音乐', '舞蹈']}
            >>>x
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}

            #如果修改副本中的值(就地修改不是替换),原件也发生变化
            >>>x['选修课'].remove('音乐')
            >>>x
            {'姓名': '张三', '选修课': ['美术', '舞蹈']}
            >>>y
            {'姓名': '李四', '选修课': ['美术', '舞蹈']}

            #哥的八卦猜想,等号类似于赋值指针,remove、append等函数相当于修改具体的内容(值)

            为了避免原件发生变化的场景需要,一种方法就是深复制。此方法用到模块copy中的函数deepcopy
            >>>x = {'姓名':'张三','选修课': ['美术','音乐','舞蹈']}
            >>>c = x.copy()
            >>>from copy import deepcopy
            >>>dc = deepcopy(x)

            #查看下两种复制结果
            >>>c
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
            >>>dc
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}

            #浅复制和深复制结果
            >>>c['选修课'].append('游泳')
            >>>c
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈', '游泳']}
            >>>x
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈', '游泳']}
            >>>dc
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}

            >>>x['选修课'].remove('音乐')
            >>>x
            {'姓名': '张三', '选修课': ['美术', '舞蹈', '游泳']}
            >>> c
            {'姓名': '张三', '选修课': ['美术', '舞蹈', '游泳']}
            >>> dc
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}

        3.3 fromkeys 方法fromkeys创建一个新字典,其中包含指定的键,且每个键对应的值都是None
            #以下示例未先建一个空字典,然后用fromkeys创建一个新字典,这种方法多余
            >>>{}.fromkeys(['姓名', '选修课'])
            {'姓名': None, '选修课': None}
            #用dict调用fromkeys。dict是类?
            >>>dict.fromkeys(['姓名', '选修课'])
            {'姓名': None, '选修课': None}

            #若不想使用默认None值,可以自定义一个值
            >>>dict.fromkeys(['姓名', '选修课'], '(空)')
            {'姓名': '(空)', '选修课': '(空)'}

    3.4 get 方法get访问不存在的键时,不会引发异常,而是返回None,或自定义返回值。
            >>>d = {'姓名':'张三','选修课': ['美术','音乐','舞蹈']}
            >>>d['年龄']
            Traceback (most recent call last):
              File "<stdin>", line 1, in <module>
            KeyError: '年龄'

            #使用get。dict.get(key, default=None),缺省是None,也可以自定义。
            >>>d.get('年龄')
            >>>print(d.get('年龄'))
             None

        3.5 item 方法item返回一个包含所有字典项的列表,其中每个元素都为(key, value)的形式。
            >>>d = {'姓名':'张三','选修课': ['美术','音乐','舞蹈']}
            >>>dict_items([('姓名', '张三'), ('选修课', ['美术', '音乐', '舞蹈'])])

        3.6 keys 方法keys以列表方式返回一个字典视图,包含字典中的键(key)
            >>>d.keys()
            dict_keys(['姓名', '选修课'])

        3.7 pop pop(key[,default])
            方法pop删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值
             >>>d
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
            >>>d.pop('姓名','张三')
            '张三'
            >>>d
            {'选修课': ['美术', '音乐', '舞蹈']}

            #感觉default好像没有用?!
             >>>d
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
            >>>d.pop('姓名','张四')
            '张三'
            >>>d
            {'选修课': ['美术', '音乐', '舞蹈']}

        3.8 setdefault  dict.setdefault(key[, default=None])
            方法setdefault和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default

            >>>d = {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
            >>>d.setdefault('年龄')
            'None'
            >>>d
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈'], '年龄': 'None'}

            >>>d = {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
            >>>d.setdefault('年龄', '28')

        3.9 update dict.update(dict2)
            把字典dict2的键/值对更新到dict里

            >>>d = {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈']}
            >>>d2 = {'年龄', '28'}
            >>>d.update(d2)
            >>>d
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈'], '年龄': '28'}

        3.10 values  dict.values()
            以列表返回字典中的所有值

            >>>d
            {'姓名': '张三', '选修课': ['美术', '音乐', '舞蹈'], '年龄': '28'}
            >>>d.values()
            dict_values(['张三', ['美术', '音乐', '舞蹈'], '28'])

    相关文章

      网友评论

        本文标题:Python学习笔记之六-字典

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