查看“Python字典”的源代码
←
Python字典
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==字典:反映对应关系的映射类型== *字典(dictionary)是包含若干“键:值”元素的无序可变序列,字典中的每个元素包含用冒号分隔开的“键”和“值”两部分,表示一种映射或对应关系,也称关联数组。定义字典时,每个元素的“键”和“值”之间用冒号分隔,不同元素之间用逗号分隔,所有的元素放在一对大括号“{}”中。 *字典中元素的“键”可以是Python中任意不可变数据,例如整数、实数、复数、字符串、元组等类型等可哈希数据,但不能使用列表、集合、字典或其他可变类型作为字典的“键”。另外,字典中的“键”不允许重复,而“值”是可以重复的。 ==字典的常用操作== ===字典的创建与删除=== *使用赋值运算符“=”将一个字典赋值给一个变量即可创建一个字典变量。 >>> aDict = {'server': 'db.diveintopython3.org', 'database': 'mysql'} *也可以使用内置类dict以不同形式创建字典。 <nowiki>>>> x = dict() #空字典 >>> type(x) #查看对象类型 <class 'dict'> >>> x = {} #空字典 >>> keys = ['a', 'b', 'c', 'd'] >>> values = [1, 2, 3, 4] >>> dictionary = dict(zip(keys, values)) #根据已有数据创建字典 >>> d = dict(name='Dong', age=39) #以关键参数的形式创建字典 >>> aDict = dict.fromkeys(['name', 'age', 'sex']) #以给定内容为“键”,创建“值”为空的字典 >>> aDict {'age': None, 'name': None, 'sex': None}</nowiki> ===字典元素的访问=== *字典中的每个元素表示一种映射关系或对应关系,根据提供的“键”作为下标就可以访问对应的“值”,如果字典中不存在这个“键”会抛出异常。 <nowiki>>>> aDict = {'age': 39, 'score': [98, 97], 'name': 'Dong', 'sex': 'male'} >>> aDict['age'] #指定的“键”存在,返回对应的“值” 39 >>> aDict['address'] #指定的“键”不存在,抛出异常 KeyError: 'address'</nowiki> *字典对象提供了一个get()方法用来返回指定“键”对应的“值”,并且允许指定该键不存在时返回特定的“值”。例如: <nowiki>>>> aDict.get('age') #如果字典中存在该“键”则返回对应的“值” 39 >>> aDict.get('address', 'Not Exists.') #指定的“键”不存在时返回指定的默认值 'Not Exists.'</nowiki> *使用字典对象的items()方法可以返回字典的键、值对。 *使用字典对象的keys()方法可以返回字典的键。 *使用字典对象的values()方法可以返回字典的值。 *'''问题解决:'''首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数。 <nowiki>>>> import string >>> import random >>> x = string.ascii_letters + string.digits + string.punctuation >>> y = [random.choice(x) for i in range(1000)] >>> z = ''.join(y) >>> d = dict() #使用字典保存每个字符出现次数 >>> for ch in z: d[ch] = d.get(ch, 0) + 1</nowiki> ===元素添加、修改与删除=== *要想字典中添加一个元素很简单,只需为相应的键(不论存在不存在),赋予一个值即可。 <nowiki>>>> aDict = {'age': 39, 'score': [98, 97], 'name': 'Dong', 'sex': 'male'} >>> aDict['city']='jinan' >>> aDict {'age': 39, 'score': [98, 97], 'name': 'Dong', 'sex': 'male', 'city': 'jinan'}</nowiki> *使用字典对象的update()方法可以将另一个字典的“键:值”一次性全部添加到当前字典对象,如果两个字典中存在相同的“键”,则以另一个字典中的“值”为准对当前字典进行更新。 <nowiki>>>> aDict = {'age': 37, 'score': [98, 97], 'name': 'Dong', 'sex': 'male'} >>> aDict.update({'a':97, 'age':39}) #修改’age’键的值,同时添加新元素’a’:97 >>> aDict {'score': [98, 97], 'sex': 'male', 'a': 97, 'age': 39, 'name': 'Dong'}</nowiki> *如果需要删除字典中指定的元素,可以使用del命令。 <nowiki>>>> del aDict['age'] #删除字典元素 >>> aDict {'score': [98, 97], 'sex': 'male', 'a': 97, 'name': 'Dong'}</nowiki> *也可以使用字典对象的pop()和popitem()方法弹出并删除指定的元素,例如: <nowiki>>>> aDict = {'age': 37, 'score': [98, 97], 'name': 'Dong', 'sex': 'male'} >>> aDict.popitem() #弹出一个元素,对空字典会抛出异常 ('age', 37) >>> aDict.pop('sex') #弹出指定键对应的元素 'male' >>> aDict {'score': [98, 97], 'name': 'Dong'}</nowiki> ===对字典进行排序=== 如果对字典进行排序,常用的形式如下: sorted(dict.items(), key=lambda e:e[1], reverse=True) 其中,e表示dict.items()中的一个元素,e[0]表示按键排序,e[1]则表示按值排序。reverse=False可以省略,默认为升序排列。 说明:字典的items()函数返回的是一个列表,列表的每个元素是一个键和值组成的元组。因此,sorted(dict.items(), key=lambda e:e[1], reverse=True)返回的值同样是由元组组成的列表。 ==标准库collections中与字典有关的类== ===OrderedDict类=== *Python内置字典dict是无序的,如果需要一个可以记住元素插入顺序的字典,可以使用collections.OrderedDict。 <nowiki>>>> import collections >>> x = collections.OrderedDict() #有序字典 >>> x['a'] = 3 >>> x['b'] = 5 >>> x['c'] = 8 >>> x OrderedDict([('a', 3), ('b', 5), ('c', 8)])</nowiki> ===defaultdict类 === *defaultdict是Python内建dict类的一个子类,第一个参数为default_factory属性提供初始值,默认为None。它覆盖一个方法并添加一个可写实例变量。它的其他功能与dict相同,但会为一个不存在的键提供默认值,从而避免KeyError异常。 <nowiki>>>> import string >>> import random >>> x = string.ascii_letters + string.digits + string.punctuation >>> y = [random.choice(x) for i in range(1000)] >>> z = ''.join(y) >>> from collections import defaultdict >>> frequences = defaultdict(int) #所有值默认为0 >>> frequences defaultdict(<class 'int'>, {}) >>> for item in z: frequences[item] += 1 #修改每个字符的频次 >>> frequences.items()</nowiki> ===Counter类=== *对于频次统计的问题,使用collections模块的Counter类可以更加快速地实现这个功能,并且能够提供更多的功能,例如查找出现次数最多的元素。 <nowiki>>>> from collections import Counter >>> frequences = Counter(z) #这里的z还是前面代码中的字符串对象 >>> frequences.items() >>> frequences.most_common(1) #返回出现次数最多的1个字符及其频率 >>> frequences.most_common(3) #返回出现次数最多的前3个字符及其频率</nowiki> 返回 [[Python组合数据类型]]
返回至
Python字典
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息