龙空技术网

码小会讲解「字典」——Python学习秘籍

码小会 79

前言:

此时各位老铁们对“pythonhaskey”大概比较重视,朋友们都需要分析一些“pythonhaskey”的相关内容。那么小编同时在网摘上搜集了一些有关“pythonhaskey””的相关文章,希望小伙伴们能喜欢,咱们一起来学习一下吧!

Python里面有3大数据结构:列表,字典和集合。之前小会已经讲解了列表,今天来讲一下字典。

作为最常用的数据结构之一,里面有一些重要的技巧用法,小会把这些都整理到一起,希望能对你的编程功力大有帮助。

一、定义:

字典的每个值都具备自己独有的名称即键( key ),每个 key 都有对应的值( value ),字典中的 key 和 value 必须成对出现 。整个字典包括在花括号‘{ }’中,它的每个键值 ( key => value )对使用冒号( : )分割,每对值之间用逗号( , )分割。

定义如记录人员成绩的字典,如下:

d = {'Woodman': 95, 'Alan': 85, 'Bobo': 59} 

我们把姓名 Woodman、Alan、Bobo 称为key,对应的成绩 95、85、59 称为value,dict 字典可以通过 key 来查找值,一个 key:value 算作一个值。

注意:dict字典用的键( key )必须是唯一的,但值则不必。一个字典中不能出现相同名称的键( key ),但值能相同,值可以是任何数据类型(字符串、数字、元组、列表、字典等)。

# 混合字典 key不重复,值可以是任意类型d = {'woodman': 98,  2.5: 'PM', 'Bobo': [89, 65, 34],'Mydict': {'Alan': 99}}

拓展:字典dict 的最大特点是查找速度快,无论 dict 有10个元素还是10万个元素,查找速度都一样。

二、字典的基本操作

1、如何访问字典中的值?

adict[key] 形式返回键key对应的值value,如果key不在字典中会引发一个KeyError。

2、如何检查key是否在字典中?

a、has_key()方法 形如:adict.haskey(‘name') 有–>True,无–>False

b、in 、not in 形如:'name' in adict 有–>True,无–>False

3、如何更新字典?

a、添加一个数据项(新元素)或键值对

adict[new_key] = value 形式添加一个项

b、更新一个数据项(元素)或键值对

adict[old_key] = new_value

c、删除一个数据项(元素)或键值对

del adict[key] 删除键key的项 / del adict 删除整个字典

adict.pop(key) 删除键key的项并返回key对应的 value值

三、字典的索引

dict1[key] #key是字典的键,返回的是对应的值valuedict1.get(key)#get方法获取键的值,若键不存在,则返回设定的默认值default(默认为None)--与`[key]`获取值的区别是,get方法遇到键不存在的时候会返回设定值,而直接索引遇到键不存在时会报错“missing-key”

四、字典遍历

1、遍历字典的key(键)

for key in adict.keys():print key

2、遍历字典的value(值)

for value in adict.values(): print value

3、遍历字典的项(元素)

for item in adict.items():print item

五、字典的排序

用万金油sorted()函数,举一个简单的例子

my_dict={"cc":100,"aa":200,"bb":10}print(sorted(my_dict.iteritems(),key=lambda x:x[0]))#表示按照key排序>>>[('aa', 200), ('bb', 10), ('cc', 100)]print(sorted(my_dict.iteritems(),key=lambda x:x[1]))#表示按照value排序>>>[('bb', 10), ('cc', 100), ('aa', 200)]

注意:原始的my_dict本身顺序并没有变(不信你可以print看看),排序是通过sorted()返回了一个新的字典。

另外一种做法,因为字典是无序,若你一开始设计的时候就希望这个数据结构,按照的添加的顺序进行有序排列(比如读取CSV文件),那么我们就是利用collection模块里面的OrderedDict()处理:

from collections import OrderedDictorderDict=OrderedDict()orderDict['a']=1orderDict['b']=2orderDict['c']=3print(orderDict)>>>OrderedDict([('a', 1), ('b', 2), ('c', 3)])

对比一下,若是普通的dict是乱序的,若不用OrderedDict()

orderDict=dict()orderDict['a']=1orderDict['b']=2orderDict['c']=3print(orderDict)>>>{'a': 1, 'c': 3, 'b': 2}

最后要提醒一下:OrderedDict()虽然是好东西,但是它内部维护了一个双向链表,若数据量很大的话,会非常消耗内存。

六、字典中提取部分子集

我们原来有一个长的字典,我们想提取其中一部分变成另外一个子集,我们怎么做呢,我们来看一个小例子:

students_score={'jack':80,'james':91,'leo':100,'sam':60}#提取分数超过90分的学生信息,并变成字典我们可以用字典推导式,轻松搞定good_score={name:score for name,score in students_score.items() if score>90}print(good_score)>>>{'james': 91, 'leo': 100}

七、总结

关于字典,记住以下几点:

1、字典的键值对是无序的( Python3.6 开始有序),值可修改,定义字典时键值( key=>value )必须成对出现;

2、字典的键(key)不可以重复,键重复时值以最后一个为准;

3、字典的键必须不可变,所以可以用数字,字符串或元组充当,而不能用列表;

4、不管字典的数据量有多大,他们的访问速度都是一样的。

好啦,今天的内容就是以上这些部分了,如果有兴趣学习Python的小伙伴,可以关注我们的免费课程《嘿有趣之Python快速入门》,点击下方了解更多即可查看。

标签: #pythonhaskey