zoukankan      html  css  js  c++  java
  • 小白学 Python(13):基础数据结构(字典)(下)

    人生苦短,我选Python

    前文传送门

    小白学 Python(1):开篇

    小白学 Python(2):基础数据类型(上)

    小白学 Python(3):基础数据类型(下)

    小白学 Python(4):变量基础操作

    小白学 Python(5):基础运算符(上)

    小白学 Python(6):基础运算符(下)

    小白学 Python(7):基础流程控制(上)

    小白学 Python(8):基础流程控制(下)

    小白学 Python(9):基础数据结构(列表)(上)

    小白学 Python(10):基础数据结构(列表)(下)

    小白学 Python(11):基础数据结构(元组)

    小白学 Python(12):基础数据结构(字典)(上)

    字典内置函数 & 方法

    (如果是来看表情包的,可以退出去了,本篇无表情包)

    字典提供了很多内置方法对字典进行操控。

    老规矩,一边看代码一边介绍。

    dict.keys()

    作用: 返回一个迭代器,可以使用 list() 来转换为列表,该列表包含所有的 key。

    dict1 = {'name': 'geekdigging', 'age': 2}
    
    print(dict1.keys())
    print(list(dict1.keys()))
    print(type(list(dict1.keys())))
    

    结果如下:

    dict_keys(['name', 'age'])
    ['name', 'age']
    <class 'list'>
    

    dict.values()

    作用: 返回一个迭代器,可以使用 list() 来转换为列表,该列表包含所有的 value 。

    print(dict1.values())
    print(list(dict1.values()))
    print(type(list(dict1.values())))
    

    结果如下:

    dict_values(['geekdigging', 2])
    ['geekdigging', 2]
    <class 'list'>
    

    dict.items()

    作用: 以列表返回可遍历的(键, 值) 元组数组。

    print(dict1.items())
    print(list(dict1.items()))
    print(type(list(dict1.items())))
    

    结果如下:

    dict_items([('name', 'geekdigging'), ('age', 2)])
    [('name', 'geekdigging'), ('age', 2)]
    <class 'list'>
    

    dict.get(key, default=None)

    作用: 返回指定键的值,如果值不在字典中返回 default(None) 值。

    print(dict1.get('name'))
    print(dict1.get('geekdigging'))
    

    结果如下:

    geekdigging
    None
    

    因为 geekdigging 并不是字典中的 key ,所以返回了默认值 None 。

    dict.pop(key[,default])

    作用: 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。

    print(dict1.pop('age'))
    print(dict1)
    

    结果如下:

    2
    {'name': 'geekdigging'}
    

    dict.setdefault(key, default=None)

    作用: 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为 default 。

    dict1.setdefault('age')
    print(dict1)
    

    结果如下:

    {'name': 'geekdigging', 'age': None}
    

    dict.update(dict2)

    作用: 把字典 dict2 的键/值对更新到 dict 里。

    dict2 = {'sex': 'male'}
    dict1.update(dict2)
    print(dict1)
    

    结果如下:

    {'name': 'geekdigging', 'age': None, 'sex': 'male'}
    

    dict.clear()

    作用: 删除字典内所有元素。

    注意: 删除字典内所有元素,并非删除字典。

    dict2.clear()
    print(dict2)
    

    结果如下:

    {}
    

    dict.copy()

    作用: 返回一个字典的浅复制。

    注意: 这里的 copy 是浅 copy ,有编程经验的同学估计理解起来并无难度。无经验的同学且听我慢慢道来,浅拷贝本质上拷贝的是一个引用,并非拷贝了整个内容,举例子的话就好比我有一个苹果,并且浅拷贝了一个给小明,我咬了一口我的苹果,但是小明发现他的苹果也被咬了一口。

    dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
    # 浅拷贝: 引用对象
    dict4 = dict3
    print(id(dict3))
    print(id(dict4))
    # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
    dict5 = dict3.copy()
    dict3['age'].remove(1)
    print(dict3)
    print(dict5)
    print(id(dict3))
    print(id(dict5))
    

    结果如下:

    2418990911064
    2418990911064
    {'name': 'geekdigging', 'age': [2, 3]}
    {'name': 'geekdigging', 'age': [2, 3]}
    2418990911064
    2418991599688
    

    这个示例理解稍有费劲儿,不着急,慢慢品,细品。

    如果我想全都深 copy ,怎么做呢?

    可以引入 copy 模块实现。

    import copy
    
    dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
    dict6 = copy.deepcopy(dict3)
    dict3['age'].remove(1)
    print(dict3)
    print(dict6)
    print(id(dict3))
    print(id(dict6))
    

    结果如下:

    {'name': 'geekdigging', 'age': [2, 3]}
    {'name': 'geekdigging', 'age': [1, 2, 3]}
    2418991602168
    2418991602008
    

    初次接触的同学,以上两个示例并不好理解,如果在理解上有问题的可以在公众号留言问我。

    老生常谈再多 BB 一句,请各位同学亲自动手实践一下示例代码。

    示例代码

    本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。

    示例代码-Github

    示例代码-Gitee

  • 相关阅读:
    强化训练1
    强化训练2
    变量的本质
    抽象层
    安装vs2015
    解决思路
    分析栈的缺点
    (转)使用yuicompressor-maven-plugin压缩js及css文件(二)
    (转)yuicompressor 与 maven结合,打包,压缩js,css (一)
    (转)Properties Editor为你解除通过native2ascii进行Unicode转码的烦恼
  • 原文地址:https://www.cnblogs.com/babycomeon/p/11790301.html
Copyright © 2011-2022 走看看