李宁老师已经在推出《Python编程思想》电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法。

。 ----------正文----------- 字典是Python提供的一种常用的数据结构,可以用于保存具有映射关系的数据。比如有成绩单数据,语文:92, 数学:98,英语:99,体育:87。从这组数据看,像是两个列表。但这两个列表中的元素之间是有一定的关联关系的(一一对应的关系)。如果单纯使用两个列表来保存这组数据,则无法记录两组数据之间的关联关系。 为了保存具有映射关系的数据,Python 提供了字典(在其他语言中有不同的叫法,如Java中叫Map),字典相当于保存了两组数据,其中一组数据是关键数据,被称为key;另一组数据可通过 key来访问,被称为value。形象地看,所以可以将字典看做是key-value的集合。 由于字典中的key是非常关键的数据,而且程序需要通过key来访问value,因此字典中的key不允许重复。 1. 创建字典 创建字典有如下两种方式: (1) 花括号语法 (2) dict()函数 在使用花括号语法创建字典时,花括号中可以包含多个key-value对,key 与value之间用英文冒号隔开,多个key-value对之间用英文逗号隔开。 示例代码:创建字典.py

scores = {'语文': 92, '数学': 98, '英语': 99, '体育':88}print(scores)# 空的花括号代表空的字典empty_dict = {}print(empty_dict)   # {'语文': 92, '数学': 98, '英语': 99, '体育': 88}# 使用元组作为dict的keydict2 = {(20, 30):'good', 30:'bad'}print(dict2)    # {(20, 30): 'good', 30: 'bad'}


上面程序中第1行代码创建了一个简单的dict,该dict的key是字符串,value是整数。然后使用一对花括号创建了一个空的字典:最后创建的字典中第1个key是元组,第2个key是整数值,这都是合法的。 需要指出的是,元组可以作为字典的key,但列表不能作为字典的key。这是由于字典要求key必须是不可变类型,但列表是可变类型,因此列表不能作为字典的key。 在使用dict()函数创建字典时,可以传入多个列表或元组参数作为key-value对,每个列表或元组将被当成一个key-value对,因此这些列表或元组都只能包含两个元素。 示例代码:创建字典.py

languages = [('Python', 1234), ('Ruby', 4321), ('Java', 8765)]# 创建包含3组key-value对的字典dict3 = dict(languages)print(dict3) # {'Python': 1234, 'Ruby': 4321, 'Java': 8765}cars = [['宝马', 123], ['大众', 432], ['特斯拉', 543]]# 创建包含3组key-value对的字典dict4 = dict(cars)print(dict4) # {'宝马': 123, '大众': 432, '特斯拉': 543}# 创建空的字典dict5 = dict()print(dict5) # {}


还可通过为dict()函数指定关键字参数创建字典,此时字典的key不允许使用表达式。

# 使用关键字参数来创建字典dict6 = dict(name = 'Bill', age = 20)print(dict6)    # {'name': 'Bill', 'age': 20}


上面代码中的key直接写name和age, 不需要将它们放在引号中。 2. 字典的基本用法

对于初学者而言,应牢记字典包含多个key-value对,而key是字典的关键数据,因此程序对字典的操作都是基于key的。基本操作如下。 ➢通过key访问value; ➢通过key添加key-value对; ➢通过key删除key-value对; ➢通过key修改key-value对; ➢通过key判断指定key-value对是否存在; 通过key访问value使用的也是方括号语法,就像前面介绍的列表和元组一样,只是此时在方括号中放的是key,而不是列表或元组中的索引(所以可以将列表和元组看做是一种特殊的字典,key是整数类型的值)。 下面的代码演示了字典元素的访问: 程序清单:访问和删除字典元素.py

scores = {'数学': 92}# 通过key访问valueprint(scores['数学'])# 对不存在的key赋值,就是增加key-value对scores['英语'] = 98scores[92] = 65print(scores) # {'数学': 92, '英语': 98, 92: 65}


如果要删除字典中的key-value对,则可使用del语句。代码如下:

# 使用del语句删除key-value对del scores['数学']del scores[92]print(scores) # {'英语': 98}


如果对dict中存在的key-value对赋值,新key对应的value就会覆盖原有的value。示例代码如下:

cars = {'宝马': 123, '玛莎拉蒂': 543, '特斯拉': 543}# 对存在的key-value对赋值,改变key-value对cars['宝马'] = 432cars['玛莎拉蒂'] = 134print(cars) # {'宝马': 432, '玛莎拉蒂': 134, '特斯拉': 543}


如果要判断字典是否包含指定的key,则可以使用in或not in运算符。需要指出的是,对于dict而言,in或not in运算符都是基于key来判断的。示例代码如下:

# 判断cars是否包含名为'玛莎拉蒂'的keyprint('玛莎拉蒂' in cars) # True# 判断cars是否包含名为'丰田'的keyprint('丰田' in cars) # Falseprint('大众' not in cars) # True


通过上面diamante可以看出,字典的key是它的关键。换个角度来看,字典的key就相当于它的索引,只不过这些索引不一定是整数类型,字典的key可以是任意不可变类型。 可以这样说,字典相当于索引是任意不可变类型的列表;而列表则相当于key只能是整数的字典。因此,如果程序中要使用的字典的key都是整数类型,则可考虑能否换成列表。 此外,还有一 点需要指出,列表的索引总是从0开始、连续增大的;但字典的索引即使是整数类型,也不需要从0开始,而且不需要连续。因此,列表不允许对不存在的索引赋值;但字典则允许直接对不存在的key赋值。这样就会为字典增加一个key-value对。 3.  与字典相关的方法

字典由dict类表示,因此我们同样可使用 dir(dict)来查看该类包含哪些方法。在Python命令行工具中执行dir(dict),会得到如下图所示的结果:

java hanlp 自定义词典配置文件 java字典使用_java获取字典所有的key


输出结果列出了dict类中的全部方法,其中不带下划线的就是为用户提供的方法,下面就介绍一些常用方法的使用方式。 clear()方法用于清空字典中所有的 key-value对,调用字典的clear()方法后,该字典就会变成一个空字典。 示例代码:与字典相关的方法.py

cars = {'宝马': 200, '特斯拉': 123, '大众': 543}print(cars) # {'宝马': 200, '特斯拉': 123, '大众': 543}# 清空cars所有key-value对cars.clear()print(cars) # {}


get()方法可以根据key来获取 value,该方法与方括号语法都可以获取字典中的value。但如果key不存在,get()方法会返回None,而方括号语法会直接抛出异常。 示例代码:

cars = {'宝马': 200, '特斯拉': 123, '大众': 543}# 获取'宝马'对应的valueprint(cars.get('特斯拉')) # 123print(cars.get('玛莎拉蒂')) # None# print(cars['宾利']) # 抛出异常


update方法用来更新字典。在执行 update方法时,如果被更新的字典中已包含对应的 key-value对,那么原 value会被覆盖。如果被更新的字典中不包含对应的 key-value对,则该key- value对被添加进去。 实例代码:

cars = {'宝马': 200, '宾利': 123, '大众': 543}cars.update({'宾利':450, '丰田': 123})# {'宝马': 200, '特斯拉': 123, '大众': 543, '宾利': 450, '丰田': 123}print(cars)


从上面的执行过程可以看出,由于被更新的字典中已包含key为“宾利”的 key-value对,因此更新时该key-value对的 value将被改写,但如果被更新的dict中不包含key为“ 丰田”的key- value对,那么更新时就会为字典增加一个 key-value对。 items()、 keys()和 values()分别用于获取字典中的所有 key-value对、所有key和所有 value。这3个方法依次返回dict_items、dict_keys和dict_values对象。 实例代码:

cars = {'宝马': 200, '宾利': 123, '大众': 543}# 获取字典所有的key-value对,返回一个dict_items对象items = cars.items()print(type(items)) # # 将dict_items转换成列表print(list(items)) # [('宝马', 200), ('宾利', 123), ('大众', 543)]# 访问第2个key-value对print(list(items)[1]) # ('宾利', 123)# 获取字典所有的key,返回一个dict_keys对象keys = cars.keys()print(type(keys)) # # 将dict_keys转换成列表print(list(keys)) # ['宝马', '宾利', '大众']# 访问第2个keyprint(list(keys)[1]) # 宾利# 获取字典所有的value,返回一个dict_values对象values = cars.values()# 将dict_values转换成列表print(type(values)) # # 访问第2个valueprint(list(values)[1]) # 123


fromkeys()方法使用给定的多个key创建字典,这些key对应的value默认都是None;也可以额外传入一个参数作为默认的 value。该方法通常会使用dict类直接调用。代码如下:

# 使用列表创建包含2个key的字典a_dict = dict.fromkeys(['x', 'y'])print(a_dict) # {'x': None, 'y': None}# 使用元组创建包含2个key的字典b_dict = dict.fromkeys(('hello', 'world'))print(b_dict)   # {'hello': None, 'world': None}# 使用元组创建包含2个key的字典,指定默认的valuec_dict = dict.fromkeys((20, 123), 'ok')print(c_dict) # {20: 'ok', 123: 'ok'}