python字典

python字典 发表时间:2017-11-03 15:04

点上方绿标即可收听朗读音频

双击文章内容从指定位置处朗读

本篇将介绍Python里面的字典更多内容请参考Python学习指南

Python是什么?

Python内置了字典dict的支持dict全称dictionary在其他语言中也称为map使用键-值对(key-value)存储具有极快的查找速度
举个例子假设要根据同学的名字查找对应的成绩如果用list实现需要两个list:

>>>names = ['Michael', 'Bob', 'Tracy'] >>>scores = [95, 75, 85]

给定一个名字要查找相应的速度就先要在names中找到相应的位置再从scores中取出对应的成绩list越长耗时越长明显不是一种很好的解决方法
如果用dict实现只需要一个"名字-成绩"的对照表直接根据名字查找成绩无论这个表有多大查找速度都不会变慢用Python写一个dict如下

>>>d = {"Michael": 95} >>>d['Michael']

为什么dict查找速度这么快?因为dict的实现原理和查字典是一样的假设字典包含了1万个汉字我们要查某一个字一个办法是把字典从第一页往后翻知道找到我们想要的字为止这种方法就是list中查找元素的方法list越大查找越慢
第二种方法时先在字典的索引表里(比如部首表)查这个字对应的页码然后直接翻到该页找到这个字无论找哪个字这种查找速度都非常快不会随着字典大小的增加而编码
dict的第二种实现方式给定一个名字比如'Michael'dict在内部就可以直接计算出Michael对应的存放成绩的"页码"也就是95这个数字存放的内存地址直接取出来所以速度非常快
你可以猜到这种key-value存储方式在放进去的时候必须根据key算出value的存放位置这样取的时候才能根据key直接拿到value

注意dict的键必须是唯一的但值则不必键必须是不可变的如字符串数字或元祖

字典的操作

字典的增删改查

字典的创建

#创建一个字典key:value形式每个键值对之间以','分隔
dict = {'Alice':'2341', 'Beth':'9102', 'Cecil':'3258'} #因为dict是可变的也可以创建一个空的字典
dict = {}

字典的取值
字典的取值类似于列表只不过列表是把键放入方括弧中而列表放的是列表的下标

>>>dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} >>>print "dict['Name']: ", dict['Name'] dict['Name']Zare >>>print "dict['Age']: ", dict['Age'] dict['Age']7

#如果字典中没有对应键就会报如下错误 Traceback (most recent call last): File "test.py", line 5, in <module>
    print "dict['Alice']: ", dict['Alice'];
KeyError: 'Alice'

修改字典元素

>>>dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
>>>dict['Age'] = 8; # 键存在就更新
>>>dict['School'] = "DPS School"; # 键不存在就新增
>>>dict {'Name': 'Zara', 'Age': 8, 'Class': 'First',"School": "DPS School"}

删除字典元素
能删除单一的元素也能清空字典清空只需一项操作
显示删除一个字典用del命令如下实例

dict = {"Name":"Zara", "Age":7, "Class":"First"} del dict['Name'] #删除键是'Name'的条目
dict.clear() #清空字典所有条目
del dict          #删除字典
#注意使用del以后字典结构都不存在会报个错
dict['Age'] Traceback (most recent call last): File "test.py", line 8, in <module>
    print "dict['Age']: ", dict['Age'];
TypeError: 'type' object is unsubscriptable

字典的查询

遍历字典主键与键值

>>>nameinfo{"a1":"yangrong"} >>>for k, value in nameinfo.items(): print k,value a1 yangrong

查看字典所有主键

>>>dict = {'ob1':'computer','ob2':'mouse', 'ob3':'printer'} >>>dict.keys() ['ob2', 'ob3', 'ob1'] >>> for k in d.keys(): print dict[k]

判断字典中是否有该主键

>>>dict.keys() ['ob2', 'ob3', 'ob1'] >>>dict.has_key('ob2') #或者'ob2' in dict

查看字典里所有键值内容

>>>dict = {'ob1':"computer", "ob2":"mouse", "ob3":"printer"} >>>dict.values() ['mouse', 'printer', 'computer']

列出所有项目

>>>dict.items() [('ob2','mouse', ('ob3', 'printer', ('ob1', 'computer')]

拷贝字典

>>> dict = {'ob1': "12", "ob2":"asdf", "ob3":"asdf"} >>> 'ob1' in dict
True
>>> a = dict.copy() >>> id(a) 35455592L >>> id(dict) 30770040L >>> a['ob1'] = "chenqi"
>>> dict {'ob2': 'asdf', 'ob3': 'asdf', 'ob1': '12'} >>> a {'ob2': 'asdf', 'ob3': 'asdf', 'ob1': 'chenqi'} >>>

拷贝的两个字典不是指向同一块内存区

合并两个字典

dict1={1:[1,11,111],2:[2,22,222]} dict2={3:[3,33,333],4:[4,44,444]} #方法一 dictMerged1=dict(dict1.items()+dict2.items()) #方法二 dictMerged2=dict(dict1, **dict2) #方法二等同于 dictMerged=dict1.copy() dictMerged.update(dict2)

Python内置函数&方法

Python字典包含了以下内置函数

  1. cmp(dict1, dict2)比较两个字典元素
  2. len(dict)计算字典元素个数即键的总数
  3. str(dict)输出字典可打印的字符串表示
  4. type(variable)返回输入的变量类型如果变量是字典就返回字典类型

    Python字典包含了以下内置方法

  5. radiansdict.clear()删除字典内所有元素
  6. radiansdict.copy()返回一个字典的浅复制关于Python的深拷贝、浅拷贝参考Python 直接赋值、浅拷贝和深度拷贝解析
  7. radiansdict.fromkeys()创建一个新字典以序列seq中元素做字典的键val为字典所有键对应的初始值
  8. radiansdict.get(key, default=None)返回指定键的值如果值不在字典中返回default值
  9. radiansdict.has_key(key)如果键在字典dict里返回true否则返回false(python3中已经去掉了使用in更符合python)
  10. radiansdict.items()以列表返回可遍历的(键, 值) 元组数组
  11. radiansdict.keys()以列表返回一个字典所有的键
  12. radiansdict.setdefault(key, default=None)和get()类似, 但如果键不已经存在于字典中将会添加键并将值设为default
  13. radiansdict.update(dict2)把字典dict2的键/值对更新到dict里
  14. radiansdict.values()以列表返回字典中的所有值
  15. radiansdict.popitem()Python 字典 popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)
    如果字典已经为空却调用了此方法就报出KeyError异常
  16. radiansdict.pop(key[,default])Python 字典 pop() 方法删除字典给定键 key 所对应的值返回值为被删除的值key值必须给出 否则返回default值

参考

  1. Python 字典(Dictionary)
  2. python_字典集合
  3. 廖雪峰(dict与set)

亲,眼睛太累了,关注exread(睿读吧)微信号,用耳朵“阅读”微信。

您可以将文章的链接或收藏的微信发送到睿读吧微信号中,我们会帮您转换成音频来听读,让您的眼睛休息一下吧!
查看来源 违规举报