前言

前两节介绍了Python列表和字符串的相关用法,这两种数据类型都是有序的数据类型,所以它们可以通过索引来访问内部元素。本文将记录一种无序的数据类型——字典!

一、字典与列表和字符串的区别

  • 字典是无序的,列表和字符串是有序的

  • 字典使用 key-value(键-值对)存储,列表和字符串为单元素存储

  • 字典的key值唯一,列表和字符串元素可以相同

  • 字典的访问速度远高于列表和字符串的访问速度

  • 字典通常被用作存储,列表和字符串常用来工作

二、字典的用法

在介绍其详细用法之前,先来看看其包含的方法:

In [1]: dir(dict)
Out[1]:
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

从上面可以看到,字典的方法屈指可数,麻雀虽小,五脏俱全啊

1.字典的初始化

通过前文可知,字典是被一对花阔号括起来,内部元素采用 key-value 形式存储的数据类型:

普通初始化:

In [5]: systems = {'windows':10,'linux':'centos 6'}      # 初始化一个字典,含有不同的数据类型

In [6]: systems = {'windows':10,'windows':8}             # 字典的 key 值必须唯一,虽然重复时不报错,但访问时有问题

In [7]: systems['windows']                               # 访问Windows时,随机给出一个值,这是不希望的,所以在创建字典时严格控制 key 的唯一
Out[7]: 8 In [9]: systems = {'windows':10,'linux':{'centos': 6}} # 字典可以嵌套

高级初始化:dict.setdefault()

In [24]: systems     # 之前存在的字典
Out[24]: {'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} In [27]: systems.setdefault('ios',12) # 使用dict.setdefault()方法传入新的 key-value:'ios':12
Out[27]: 12 In [28]: systems
Out[28]: {'ios': 12, 'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} In [29]: systems.setdefault('linux','centos 7') # setdefault方法对于字典里没有的key是新建,对于已经存在的key来说,则不会改变原有的值,并且返回原有的值
Out[29]: 'centos 6' In [30]: systems # 可以看到已经存在的 'linux'的值并没有被改变
Out[30]: {'ios': 12, 'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} # 这种方法极为适合于未知的字典

通过列表初始化:dict.formkeys()

In [59]: systems={}   # 创建一个空字典

In [61]: systems.fromkeys(['linux','windows','ios'],['centos 6',10,12])
Out[61]:
{'ios': ['centos 6', 10, 12],
'linux': ['centos 6', 10, 12],
'windows': ['centos 6', 10, 12]} # 可以看到,这种方法超级坑,并不是想象中的一一对应,而是一对多

2.字典的访问

通过字典名加一对方括号 dict[key] 来访问字典的元素:

In [11]: systems = {'windows':10,'linux':'centos 6'}

In [12]: systems['windows']
Out[12]: 10 In [13]: systems['linux']
Out[13]: 'centos 6'

循环访问:字典本身是可以循环的:

In [14]: systems
Out[14]: {'linux': 'centos 6', 'windows': 10} In [15]: for key in systems: # 可以看到字典默认循环 key
...: print(key)
...:
linux
windows In [16]: for key in systems: # 可以通过方括号的访问方式来得到value值
...: value = systems[key]
...: print(key,value)
...:
linux centos 6
windows 10

更高级的循环访问:使用 dict.items()

In [17]: for key,value in systems.items():   # 使用字典方法items()来循环遍历字典,但是会把字典转换为列表,还是少用哇
...: print(key,value)
...:
linux centos 6
windows 10

3.字典的增加和修改

字典的增加:dict[新的key] = 新的value

In [19]: systems
Out[19]: {'linux': 'centos 6', 'windows': 10} In [20]: systems['ubuntu'] = 16 # 直接增加即可 In [21]: systems
Out[21]: {'linux': 'centos 6', 'ubuntu': 16, 'windows': 10} # 通过上面代码明显发现字典是无序的

字典的修改:dict[存在的key] = 新的value

In [21]: systems
Out[21]: {'linux': 'centos 6', 'ubuntu': 16, 'windows': 10} In [22]: systems['ubuntu'] = 17 # 直接改就行 In [23]: systems
Out[23]: {'linux': 'centos 6', 'ubuntu': 17, 'windows': 10}

字典的更新:dict1.updata(dict2)

In [31]: systems1 = {'ios':12,'windows':8}

In [34]: systems2 = {'linux':'centos 6','windows':10}

In [35]: systems1.update(systems2)      # 使用systems2更新systems1

In [36]: systems1
Out[36]: {'ios': 12, 'linux': 'centos 6', 'windows': 10}

4.字典的删除

删除指定键值对方法1:dict.pop(key)

In [37]: systems
Out[37]: {'ios': 12, 'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} In [38]: systems.pop('ios') # 删除'ios',并且返回其值
Out[38]: 12 In [39]: systems
Out[39]: {'linux': 'centos 6', 'ubuntu': 17, 'windows': 10}

删除指定键值对方法2:使用del

In [39]: systems
Out[39]: {'linux': 'centos 6', 'ubuntu': 17, 'windows': 10} In [40]: del systems['linux'] In [41]: systems
Out[41]: {'ubuntu': 17, 'windows': 10}

随机删除键值对:dict.popitem()

In [41]: systems
Out[41]: {'ubuntu': 17, 'windows': 10} In [42]: systems.popitem() # 随机删除键值对,并返回此键值对
Out[42]: ('windows', 10) In [43]: systems
Out[43]: {'ubuntu': 17}

清空字典元素:dict.clear()

In [64]: systems = {'linux':'centos 6','windows':10}

In [65]: systems.clear()

In [66]: systems    # 字典仍然存在,只是变成了一个空字典
Out[66]: {}

5.字典的查找

使用关键字 in :

In [46]: systems = {'linux':'centos 6','windows':10}

In [47]: 'linux' in systems
Out[47]: True In [48]: 'iso' in systems
Out[48]: False

使用访问查找:

In [49]: systems
Out[49]: {'linux': 'centos 6', 'windows': 10} In [50]: systems['linux'] # 访问键值对,有返回值证明存在
Out[50]: 'centos 6' In [51]: systmes['ios'] # 抛出异常,证明没有此元素
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-51-e5e3f5004036> in <module>
----> 1 systmes['ios'] KeyError: 'ios'

使用 dict.get(key) 查找:

In [52]: systems
Out[52]: {'linux': 'centos 6', 'windows': 10} In [53]: systems.get('linux') # 查找'linux',有返回值,证明存在
Out[53]: 'centos 6' In [54]: systems.get('ios') # 没有返回值,证明不存在 # 和访问的区别就在于没有此元素时,get方法不会报错

6.字典的统计

统计key:dict.keys()

In [55]: systems
Out[55]: {'linux': 'centos 6', 'windows': 10} In [56]: systems.keys()
Out[56]: dict_keys(['linux', 'windows'])

统计value:dict.values()

In [57]: systems
Out[57]: {'linux': 'centos 6', 'windows': 10} In [58]: systems.values()
Out[58]: dict_values(['centos 6', 10])

7.字典的拷贝

请参考列表的拷贝,大同小异ㄟ( ▔, ▔ )ㄏ

#11 Python字典的更多相关文章

  1. Python学习(11)字典

    目录 Python 字典 访问字典中的值 修改字典 删除字典元素 字典键的特性 字典内置函数&方法 Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. ...

  2. python 字典排序 关于sort()、reversed()、sorted()

    一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...

  3. python字典构造函数dict(mapping)解析

    Python字典的构造函数有三个,dict().dict(**args).dict(mapping),当中第一个.第二个构造函数比較好理解也比較easy使用, 而dict(mapping)这个构造函数 ...

  4. python 字典操作方法详解

    字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型. 注意,浮点数比较很不精确, ...

  5. python字典练习题

    python字典练习题 写代码:有如下字典按照要求实现每一个功能dict = {"k1":"v1","k2":"v2", ...

  6. Python 字典 fromkeys()方法

    Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对象中的元素分别作为字典中的键,且所有键对应同一个值,默认为None. fromkeys() 方法语法: 1 dict.f ...

  7. <转>python字典排序 关于sort()、reversed()、sorted()

    一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...

  8. Python 字典 dict() 函数

    描述 Python 字典 dict() 函数用于创建一个新的字典,用法与 Pyhon 字典 update() 方法相似. 语法 dict() 函数函数语法: dict(key/value) 参数说明: ...

  9. Python 字典 update() 方法

    描述 Python 字典 update() 方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 用法与 Python dict() 函数相似. 语法 update ...

随机推荐

  1. 实战Python实现BT种子转化为磁力链接

    经常看电影的朋友肯定对BT种子并不陌生,但是BT种子文件相对磁力链来说存储不方便,而且在网站上存放BT文件容易引起版权纠纷,而磁力链相对来说则风险小一些. 将BT种子转换为占用空间更小,分享更方便的磁 ...

  2. Springboot+Mybatis 显示sql语句

    在application.properties里添加 logging.level.com.xxx.service=debug com.xxx.service为包路径,一般可以将service层全加上 ...

  3. verilog 有符号数运算

    1)之前的笔记写过<补码探讨>,可知在FPGA综合成电路的时候最底层都是以补码的形式在运算,正数的补码就是本身,负数的补码要取反+1. (2)那么Verilog中编程的时候对编程人员来说, ...

  4. Ubuntu 14.04 LTS 下使用校园网客户端DrclientLinux

    原先博客放弃使用,几篇文章搬运过来 下载客户端并解压 安装开发包 sudo -i dpkg --add-architecture i386 #添加32位的支持 apt-get update apt-g ...

  5. 支持复制粘贴word图片的文本编辑器

    下载并打开基于PHP环境的工程: 运行: 尝试使用文档复制后粘贴进来:   通过粘贴后,文档以及图片被粘贴进来了,看看html代码: 由此可看出图片全部使用img标签统一. 看看文档图片被放置在哪了: ...

  6. Note | Markdown

    目录 一.代码段 1.简单代码 2.大段代码 二.块注释 Blockquote 三.标题设置 四.字体 1.斜体 2.粗体 3.下划线 方案1:行内 HTML 方案2:html的span标签.设置行内 ...

  7. FileInputStream与FileOutputStreawm实现文件的加密与解密

  8. MFC开发中添加自定义消息和消息响应函数

    (1)在.h或.cpp文件定义一个消息 #define CLICK_MESSAGE_BOX WM_USER+1001 //add by 20180612 给主窗口ctrl.cpp发送消息 //自定义消 ...

  9. linux 修改用户密码的几种方法

    1.passwd 命令,手动修改: [root@localhost testuser]# passwd testuser Changing password for user testuser. Ne ...

  10. ASP.NET Core OceLot 微服务实践

    1.OceLot中间件介绍 在传统的BS应用中,随着业务需求的快速发展变化,需求不断增长,迫切需要一种更加快速高效的软件交付方式.微服务可以弥补单体应用不足,是一种更加快速高效软件架构风格.单体应用被 ...