|
|
51CTO旗下网站
|
|
移动端

2.2.8 字典(1)

《自学Python:编程基础、科学计算及数据分析》第2章Python 基础,在本章中,我们将学习Python 语言的基本使用,掌握Python 的基本使用方法,为后续的学习打下基础。本节为大家介绍字典。

作者:李金来源:机械工业出版社|2018-05-03 17:14

2.2.8 字典(1)

字典(Dictionary)是 Python中一种由“键-值”组成的常用数据结构。我们可以把“键”类比成单词,“值”类比成单词对应的意思,这样,“键-值”相当于一种“单词-意思”的对应。我们可以通过查询“单词”,来得到它对应的“意思”。

1.字典的生成和基本操作

Python中使用一对花括号“{}”或者 dict()函数来创建字典。

空的字典可以用以下两种方法产生:

  1. In [1]: a = {}   
  2. In [2]: type(a)   
  3. Out[2]: dict   
  4. In [3]: type(dict())   
  5. Out[3]: dict 

我们可以使用索引的方式,向字典中插入键值对:

  1. In [4]: a["one"] = 1   
  2. In [5]: a["two"] = 2   
  3. In [6]: a   
  4. Out[6]: {'one': 1, 'two': 2} 

字符串“one”和“two”是索引的键,1和 2是对应的值。键可以是数字,也可以是字符串。

可以通过索引查看字典中对应键的值:

  1. In [7]: a["one"]   
  2. Out[7]: 1 

可以直接赋值修改它:

  1. In [8]: a["one"] = "No.1"   
  2. In [9]: a["one"]   
  3. Out[9]: 'No.1'  

字典中的元素是没有顺序的,因此,字典只支持用键去进行索引,不支持用位置索引。如果索引的数字不是字典的键,Python会抛出一个异常:

  1. In [10]: a[1]  
  2. KeyError    Traceback (most recent call last)   
  3. <ipython-input-10-cc39af2a359c> in <module>()   
  4. ----> 1 a[1]   
  5.  
  6. KeyError: 1 

Python用类似于“ {'one': 1, 'two': 2}”的结构来表示一个字典,可以直接使用这样的结构来创建字典:

  1. In [11]: b = {'one': 1, 'two': 2}   
  2. In [12]: b['one']   
  3. Out[12]: 1  

2.键的不可变性

字典是一种高效的存储结构,其内部使用基于哈希值的算法,用来保证从字典中读取键值对的效率。不过,哈希值算法要求字典的键必须是一种不可变类型。

使用可变类型作为键时,Python会抛出异常,如列表:

  1. In [13]: a[[1, 2]] = 1  
  2. TypeError   Traceback (most recent call last)   
  3. <ipython-input-13-ebc48df9a079> in <module>()   
  4. ----> 1 a[[1, 2]] = 1   
  5.  
  6. TypeError: unhashable type: 'list' 

字典中值的类型则没有任何限制。

3.键的常用类型

在不可变类型中,整数和字符串是键昀常用的两种类型。由于精度问题,我们一般不使用浮点数作为键的类型。

例如,考虑这样的情况:

  1. In [14]: data = {}   
  2. In [15]: data[1.1 + 2.2] = 6.6 

由于浮点数存在精度问题,虽然看起来字典中的键为 3.3,但是当我们查看键 3.3的值时,Python会抛出异常:

  1. In [16]: data[3.3]  
  2. KeyError    Traceback (most recent call last)   
  3. <ipython-input-16-a48e87d01daa> in <module>()   
  4. ----> 1 data[3.3]   
  5.  
  6. KeyError: 3.3 

查看 data的值就会发现,这的确是因为浮点数的精度问题所引起:

  1. In [17]: data   
  2. Out[17]: {3.3000000000000003: 6.6} 

元组也是一种常用的键值。

例如,假设某航空公司从纽约到北京有 15架航班,从北京到纽约有 20架航班,从上海到纽约有25架航班,我们用一个字典存储这些信息:

  1. In [18]: connections = {}   
  2. In [19]: connections[('New York', 'Beijing')] = 20   
  3. In [20]: connections[('Beijing', 'New York')] = 15   
  4. In [21]: connections[('Shanghai', 'New York')] = 25   
  5. In [22]: connections   
  6. Out[22]: {('Beijing', 'New York'): 15, ('New York', 'Beijing'): 20,   
  7. ('Shanghai', 'New York'): 25} 

元组是有序的,因此,在这个字典中,('New York', 'Beijing')和('Beijing', 'New York')是两个不同的键。

4.从属关系的判断

与列表类似,可以用关键字 in来判断某个键是否在字典中:

  1. In [23]: barn = {'cows': 1, 'dogs': 5, 'cats': 3}   
  2. In [24]: 'chickens' in barn   
  3. Out[24]: False   
  4. In [25]: 'cows' in barn   
  5. Out[25]: True   
  6. In [26]: 5 in barn   # 虽然5是字典的值,但它不是字典的键   
  7. Out[26]: False  

5.字典的方法

(1).get()方法

用索引查询字典中不存在的键时,Python会抛出异常:

  1. In [27]: a = {'one': "this is number 1", "two": "this is number 2"}   
  2. In [27]: a["three"]   
  3.  
  4. KeyError    Traceback (most recent call last)   
  5. <ipython-input-27-8a5f2913f00e> in <module>()   
  6. ----> 1 a["three"]   
  7.  
  8. KeyError: 'three' 

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Linux命令、编辑器与Shell编程

本书是目前所能找到的最实用、最全面的Linux指南和参考手册,也是唯一一本提供以下全部内容的书籍: 更好更实用的示例覆盖了实际工作中需...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊