字典dict是Python中唯一内置的映射类型,由键值对组成,字典是无序的。字典的键必须是不变对象,如字符串、数字、元组等,而包含可变对象的列表、字典和元组则不能作为键。这里可变和不可变的意思是指这个可以对象可以被哈希,内置函数hash()可以用来测试对象是否可被哈希。字典的值可以为任何对象。下文中用k来表示键,用v来表示值,字典的形式为d = {k1:v1, k2:v2,..., kn:vn}

字典的创建


1. 使用{ }创建

  1. student = {"name": "Jack" , "age": 14, "sex": "male"}

2. 使用关键字dict创建

dict是Python的内置工厂函数,支持位置参数*args和关键字参数**kwargs,位置参数*args是一个元组,所以传递的参数只要最终能转换为元组对象都可以。

  • 使用位置参数创建字典
  1. info = [('name',"jack"),('age',14),('sex','male')] #所有元组包含在一个列表中
  2. student = dict(info)   #方法一:通过列表来创建一个字典,列表会被转换为元组
  3.  
  4. student = dict((('name',"jack"),('age',14),('sex','male')))  #方法二:直接通过元组来创建
  • 使用关键字参数创建字典
  1. student = dict(name="Jack",age=14, sex="male") #关键字参数关键
    studend = dict() #关键空字典
  • 混合使用位置参数和关键字参数创建字典
  1. student = dict((('name',"jack"),('age',14)), sex="male")

  3. 使用dict.fromkeys(s, [,values])创建

  dict.fromkeys(s, [,values])创建一个新字典并将序列s中的所有元素作为新字典的键,而且这些键的值均为value.

  1. m = dict(['k1','k2','k3'], 20) #m={'k3': 20, 'k2': 20, 'k1': 20}

  

  字典的使用


  数据类型的一般使用,无外乎读、写、删、改、排序这几种,字典也一样。

  • 获取字典的键
  1. student = {"name": "Jack" , "age": 14, "sex": "male"}
  2.  
  3. #方法一:循环获取字典的键
  4. for k in student:
  5. print k
  6.  
  7. #方法二:获取所有的键,调用m.keys()获取字典的序列
  8. keys = student.keys() #kyes=['age', 'name', 'sex']
  • 获取字典的值
  1. #方法一:使用m[k]
  2. for k in student:
  3. v = student[k]
  4.  
  5. #方法二:使用m.get(k,[,v])获取,返回m[k],如果找不到返回v
  6. fro k in student:
  7. v = m.get(k,"error")
  8.  
  9. #方法三:获取所有的值,m.values()返回m中所有值的序列
  10. values = student.values() #values = [14, 'jack', 'male']
  • 获取字典的键值对
  1. #方法一:循环获取
  2. for k, v in student:
  3. pass
  4.  
  5. #方法二:获取所有的键值对,m.items()返回(k,v)组成的序列
  6. items = student.items() #items = [('age', 14), ('name', 'jack'), ('sex', 'male')]
  • 检查键是否存在
  1. #方法一:使用关键字in
  2. if "name" in student:
  3. return True
  4.  
  5. #方法二:使用m.has_keys(k)函数(Python3中已经不用,不推荐使用)
  6. if student.has_keys("name"):
  7. return True
  • 获取键值对的数目
  1. L = len(student) #L = 3
  • 更新字典
  1. #方法一:更新或插入单个值,m[k]=v
  2. student["name"] = "Jonh"
  3.  
  4. #方法二:使用m.update(b),将b中所有的对象添加到m中
  5. student.update([("grade",3),("name","Smith")]) # student={'grade': 3, 'age': 14, 'name': 'Smith', 'sex': 'male'}
  6. student.update({"grade":4, "age":20}) #student={'name': 'Smith', 'grade': 4, 'age': 20, 'sex': 'male'}
  7.  
  8. #方法三:使用m.setdefault(k,[,v]),如果找到m[k]返回m[k],否则将m[k]设为v,如果没有设置v则默认为None
  9. student.setdefault("email","123@sina.com") #{'name': 'Smith', 'grade': 4, 'age': 20, 'email': '123@sina.com', 'sex': 'male'}
  • 删除字典和值
  1. #方法一:删除单个值, del m[k]
  2. del student["name"]
  3.  
  4. #方法二:m.pop(k [,default]),如果找到m[k]则从m中删除它;否则,如果提供default的值,则返回这个值,如有提供则引发KeyError
  5. m.pop("name")
  6.  
  7. #方法三:m.popitem(),删除一个随机(k,v)对,并将其返回为元组
  8. item = student.popitem() #item = ('tel', None)
  9.  
  10. #方法四:删除所有值,
  11. student.clear()
  • 拷贝字典
  1. #调用m.copy(),返回的是一个新的浅副本的字典。注意这种方式和m1=m这种的区别,m1=m这种拷贝方式,字典m1和m
  2. #指向的是同一字典对象,如果改变m1的键值,则同样会改变m。而使用m.copy()获得的字典则是一个完全新的字典.
  3. student = {"name": "Jack" , "age": 14, "sex": "male"}
  4. s1= student #s1 = {"name": "Jack" , "age": 14, "sex": "male"}
  5. s2 = student.copy() #s2={"name": "Jack" , "age": 14, "sex": "male"}
  6.  
  7. s1["name"] = "Bob" #s1=student = {"name": "Bob" , "age": 14, "sex": "male"},student值被改变
  8. s2["name"] = "Rohn" #s2={"name": "Rohn" , "age": 14, "sex": "male"},student没有改变

 

   字典操作函数表


  

方法名字 操作
dict.clear() 删除字典中所有元素
dict.copy() 返回字典(浅复制)的一个副本
dict.fromkeysc(seq,val=None) 创建并返回一个新字典,以seq 中的元素做该字典的键,val 做该字典中所有键对应的初始值(如果不提供此值,则默认为None)
dict.get(key,default=None) 对字典dict 中的键key,返回它对应的值value,如果字典中不存在此键,则返回default 的值(注意,参数default 的默认值为None)
dict.has_key(key) 如果键(key)在字典中存在,返回True,否则返回False. 在Python2.2版本引入in 和not in 后,此方法几乎已废弃不用了,但仍提供一个 可工作的接口。
dict.items() 返回一个包含字典中(键, 值)对元组的列表
dict.keys() 返回一个包含字典中键的列表
dict.values() 返回一个包含字典中所有值的列表
dict.iter() 方法iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表。
dict.pop(key[, default]) 和方法get()相似,如果字典中key 键存在,删除并返回dict[key],如果key 键不存在,且没有给出default 的值,引发KeyError 异常。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。

【Python学习笔记】字典操作的更多相关文章

  1. python学习笔记——字典操作

    修改 a={'add':"shanghao","name":"zhangdong"} a['name']='zhangsan' 添加 a={ ...

  2. python学习笔记:文件操作和集合(转)

    转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...

  3. python 学习笔记 redis操作

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  4. Python学习笔记-字典

    字典是python中唯一内建的映射类型. 创建字典phonebook = {'Alice':'2341','Beth':'9102'} 可以使用dict通过其他映射或者键值对的序列建立字典.关键值参数 ...

  5. Python学习笔记(字典)

    今天学习一个python中的基本类型--字典(dictionary) 字典这种数据结构有点像我们平常用的通讯录,有一个名字和这个名字对应的信息.在字典中,名字叫做“键”,对应的内容信息叫做“值”.字典 ...

  6. Python学习笔记——文件操作

    python中,一切皆对象.   一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建 ...

  7. python学习笔记——列表操作

    python列表操作——增 append:追加一条数据到列表的最后 name = ["Zhangsan","XiongDa","Lisi"] ...

  8. python学习笔记之——操作mysql数据库

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...

  9. Python学习笔记_操作Excel

    Python 操作Exel,涉及下面几个库: 1.xlrd 读取Excel文件 2.xlwt 向Excel文件写入,并设置格式 3.xlutils 一组Excel高级操作工具,需要先安装xlrd和xl ...

  10. 03 python学习笔记-文件操作(三)

    本文内容主要包括以下方面: 1. 文件操作基本认识2. 只读(r, rb)3. 只写(w, wb)4. 追加(a, ab)5. r+读写6. w+写读7. a+写读(追加写读)8. 文件的修改 一.文 ...

随机推荐

  1. 浅谈Linux下的五种I/O模型

     一.关于I/O模型的引出 我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer.如下图所 ...

  2. 虚拟机 linux系统如何安装vmware Tools

    1.打开VMware Workstation虚拟机,开启CentOS系统 虚拟机-安装VMware Tools 登录CentOS终端命令行 2.mkdir /media/mnt    #新建挂载目录 ...

  3. Windows,OS X 屏幕录制gif的工具

    gif比png,jpg具有更好的展示效果.github上的很多项目就用gif. 一个比较好的工具是 : http://cockos.com/licecap/    但是目前不支持linux.

  4. android:descendantFocusability的作用:viewgroup与其上面view的焦点控制,如何让子view失去焦点等。

    ViewGroup的下面这个属性可以控制. 原文: android:descendantFocusability Defines the relationship between the ViewGr ...

  5. java-基础练习题1

    /** 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,* 假如兔子都不死,问每个月的兔子总数为多少?* 1.程序分析: 兔子的规律为数列1, ...

  6. [Golang] base64加密与解密

    首先解释以下什么是base64(来自百度百科): Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64 ...

  7. 配置Tomcat 中文字符集问题

    找到Tomcat安装路径下的conf文件夹下的server.xml配置文件,修改配置Tomcat端口的标签"Connector",添加URIEncoding属性,代码如下: < ...

  8. 各个 Maven仓库 镜像(包括国内)

    本来之前用的OSC的Maven库,不过最近客户这边换了联通的网络之后,OSC的库就完全连不上了,不知道是不是因为OSC用的是天翼赞助的网络的原因,所以收集了一些其他的镜像库 首推当然还是OSC(不过联 ...

  9. HDU 5375 Gray code 格雷码(水题)

    题意:给一个二进制数(包含3种符号:'0'  '1'  '?'  ,问号可随意 ),要求将其转成格雷码,给一个序列a,若转成的格雷码第i位为1,则得分+a[i].求填充问号使得得分最多. 思路:如果了 ...

  10. Perfect smooth scrolling in UITableViews

    https://medium.com/ios-os-x-development/perfect-smooth-scrolling-in-uitableviews-fd609d5275a5 Diffic ...