一、字典的介绍

  字典(dict)是python中唯一的一个映射类型,它是以{}括起来的键值对组成,在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存在这个地址中,这种算法被称为hash算法,所以,切记,在dict中存储的key-value中的key必须是可hash的,如果你搞不懂什么是可哈希,暂时可以这样记:可以改变的都是不可哈希的,那么可哈希就意味着不可变。这个是为了能准确的计算内存地址而规定的。

  已知的可哈希(不可变)的数据类型:int,str,bool,tuple

  不可哈希(可变)的数据类型:list,dict,set

  语法:{key1: value1, key2: value2, … }

  注意:key必须是不可变(可哈希)的,value没有要求,可以保存任意类型的数据。

    # 合法
dic = {
123: 456,
True: 999,
"id": 1,
"name": 'sylar',
"age": 18,
"stu": ['帅哥', '美女'],
(1, 2, 3): '麻花藤'
}
print(dic[123])
print(dic[True])
print(dic['id'])
print(dic['stu'])
print(dic[(1, 2, 3)])
# 不合法
dic1 = {[1, 2, 3]: '周杰伦'} # list是可变的. 不能作为key
dic2 = {{1: 2}: "哈哈哈"} # dict是可变的. 不能作为key
dic3 = {{1, 2, 3}: '呵呵呵'} # set是可变的. 不能作为key

  dict保存的数据不是按照我们添加进去的顺序保存的,是按照hash(可哈希)表的顺序,而hash(可哈希)表不是连续的,所以dict不能进行切片工作,它只能通过key来获取dict中的数据。

二、字典的增、删、改、查和其他相关操作

2.1 增

字典的增加操作有:dic[key] = value,dic.setdefault(key, value),具体用法如下示例:

    dic = {}
dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增一个key-value组合,如果dict中已经有这个key了,那么将会覆盖原来的值
dic['age'] = 18
print(dic) # 结果为:{'name':'周润发', 'age':18}
# 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值
dic.setdefault('李嘉诚') # 也可以往里面设置值,dict中增加键值对 "李嘉诚":None,返回值是None
print(dic) # 结果为:{'name':'周润发', 'age':18, '李嘉诚':None}
dic.setdefault("李嘉诚", "房地产") # 如果dict中已经有这个key了. 那么setdefault将不会起作用,返回值是这个key对应的dict中的value值
print(dic) # 结果为:{'name':'周润发', 'age':18, '李嘉诚':None}
dic.setdefault("李嘉", "") # dict中增加键值对 "李嘉":"18",返回值是18
print(dic) # 结果为:{'name':'周润发', 'age':18, '李嘉诚':None, '李嘉':'18'}
2.2 删除

字典的删除操作有:pop[key],del dic[key],popitem(),clear,具体用法如下示例:

    dic = {"jay":"who", "i":"wang", "zhao":"jie", "niu":"li"}
ret = dic.pop("jay") # pop有返回值,返回被删除的value值
print(ret) # 结果为:who
del dic["i"]
print(dic) # {'zhao':'jie','niu':'li'}
ret = dic.popitem() # 随机删除,返回一个元组(删除的key , 删除的value),可以用解构 k , v = dic.popitem()
print(ret) # 结果为:('niu', 'li')    dic.clear() # 清空字典
   print(dic) # {}

  dic.pop()必须有一个参数key,即要删除的元素的key,否则报错,而list.pop()不带参数默认删除最后一个元素。

2.3 修改

字典的修改操作有:dic[key] = value,dic.update(),具体如下示例代码:

    dic0 = {"":"张三", "":"李四"}
dic0[""] = "王五" # 强制修改
print(dic0) # 结果为:{'1':'张三', '2':'王五'} dic = {"id":123, "name":'sylar', "age":18}
dic1 = {"id":456, "name":"麻花藤", "ok":"wtf"}
dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增.
print(dic) # 结果为:{'id':456, 'name':'麻花藤', 'age':18, 'ok':'wtf'}
print(dic1) # 结果为:{'id':456, 'name':'麻花藤', 'ok':'wtf'}
2.4 查询

查询一般用key来查找具体的数据,如get(key),dic[key],setdefault(key),还有for循环,具体如下:

    dic = {"id": 123, "name": 'sylar', "age": 18}
print(dic['name'])
# print(dic['ok']) # 没有这个键的时候会报错 KeyError
print(dic.get("ok")) # 没有这个键的时候返回None
print(dic.get("ok", "牛B")) # 没有这个键时,第二参数可以指定返回内容,原dict内容不变,此打印结果为:牛B
print(dic.setdefault("ok")) # 没有这个键的时候会为dict增加键值对"ok":None,并返回None,即此打印结果是None
    dic = {"id":123, "name":"sylar" , "age":18}
for i in dic:
print(i) # 获取到的是 key
print(dic[i]) # 获取到的 value
2.5 其他操作

  keys     获取到所有的键存在一个高仿的列表中;

  values   获取到所有的值存在一个高仿的列表中;

  items    获取到所有的键值对以元组的形式存在一个高仿的列表中;

  具体用法如下示例:

    dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科比"}
print(dic.keys())
# 结果为:dict_keys(['id', 'name', 'age', 'ok']) 不用管它是什么.当成list来用就行
for key in dic.keys():
print(key) print(dic.values())
# 结果为:dict_values([123, 'sylar', 18, '科比']) 不用管它是什么.也当list来用
for value in dic.values():
print(value) print(dic.items())
# 结果为:dict_items([('id', 123), ('name', 'sylar'), ('age', 18), ('ok', '科比')]),这个东西也是list.只不过list中装的是tuple
for key,value in dic.items(): # 这个是解构
print(key, value) # 解构:将后边解构打开按位置赋值给变量,支持:字符串、列表、元组
a, b = 1, 2
print(a, b) # 1 2 (c, d) = 3, 4
print(c, d) # 3 4 e, f = [1, 2, 3] # 解构的时候注意数量必须匹配,所以这样写不对

三、字典的嵌套

字典的嵌套示例如下:

    # 字典的嵌套
dic1 = {
"name": "汪峰",
"age": 43,
"wife": {
"name": '章子怡',
"age": 39
},
"children": ['第一个孩子', '第二个孩子'],
"desc": '峰哥不会告我吧. 没关系的'
}
print(dic1.get("wife").get("name"))
print(dic1.get("children"))
print(dic1.get("children")[1]

python数据类型三(字典)的更多相关文章

  1. python 数据类型三 (字典)

    一.字典的介绍 字典(dict)是python中唯一的一个映射类型,它是以{}括起来的键值对组成,在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存 ...

  2. python数据类型:字典Dictionary

    python数据类型:字典Dictionary 字典是一种可变容器模型,可以存储任意类型对象 键是唯一的,但是值不需要唯一 值可以取任何数据类型,但是键必须是不可变的,如字符串,数字,元组 创建字典: ...

  3. Python数据类型-6 字典

    字典 Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度.但它是无序的,包含的元素个数不限, ...

  4. Python数据类型(字典和集合)

    1.5 Dictionary(字典) 在Python中,字典用放在花括号{}中一系列键-值对表示.键和值之间用冒号分隔,键-值对之间用逗号分隔. 在字典中,你想存储多少个键-值对都可以.每个键都与一个 ...

  5. Python数据类型-04.字典

    字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据 ------------ 完美的分割线 ------------- 1.字典引入 # 为何还要用字典?存放一个人的信 ...

  6. python数据类型之字典操作

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型.一.创建字典字典由key和value成对组成.基本语法如下: infos = {"name&q ...

  7. python 数据类型 之 字典

    python 3.6.5字典的特性和定义定义:{'key_1':vlaue_1,'key_2':value_2}1.键与值用冒号 : 分开2.项与项 用 , 分开 特性1.可以存放多个值,可以不唯一, ...

  8. python数据类型之字典

    字典定义 字典是一种 key-value 的数据类型,这点很重要,是区别使用列表和字典的依据. 语法格式: info = { 'stu1101': "Aaron", 'stu110 ...

  9. Python数据类型(字典)

    文章内容参考了教程:http://www.runoob.com/python/python-basic-syntax.html#commentform Python 字典(Dictionary) 字典 ...

随机推荐

  1. 修正ECMALL在PHP5.3以上版本中无法开启支付方式的BUG

    修正ECMALL在PHP5.3以上版本中无法开启支付方式的BUG 很多用户反映说PHP5.3.3下,ECMALL的商家无法安装支付方式,这个是比较严重的事情,不能安装支付方式那什么都不能干呢,那我就免 ...

  2. 奇怪的string

    代码1: #include <iostream> //#include <string> using namespace std; int main(int argc, cha ...

  3. 跟着百度学PHP[14]-PDO的预处理语句2

    在$sql = $pdo -> prepare("insert into users(gold,user,password) values(?,?,?)"):条语句我们不仅仅 ...

  4. 1.2.1 Fragments - 碎片

    在activity中,Fragment代表了一种行为和用户界面的一部分.在一个activity里,你可以联合多个fragment来创建一个多面板的UI,你也可以在多个activity里重复使用同一个f ...

  5. [Python]计算闰年时候出现的and和or优先级的问题以及短路逻辑

    好吧题目非常easy.可是有些细节还是挺有意思的. 题目是:计算今年是否是闰年,推断闰年条件,满足年份模400为0,或者模4为0可是模100不为0 答案是这种: import time #计算今年是否 ...

  6. Github上Fork代码,及源码修改

    iOS开发中经常遇到这种情况,你使用的第三方库不能完全满足自己项目需要,只能修改源码来解决. 我们以前的解决办法是,添加到项目中直接修改源码.这样就有一个问题,不能和源库同步,当作者更新后你不能(po ...

  7. 如何使用NFS

    这两个网卡之间可以通信的,如图所示 也可以写成具体的ip地址,或者ip地址段例如192.168.1.2-200 注意看下面这幅图,路径一定要写完整 下面开始挂载共享的目录 挂载之后什么都没有出现说明挂 ...

  8. mongodb数据库安装与卸载

    此处以centos下monggodb3.4版本安装为例,可参考官网安装教程 步骤如下: 1.配置mongodb ym源 vi /etc/yum.repos.d/mongodb-org-3.4.repo ...

  9. Android Studio无法启动,gradle下载不了 提示“building “ 项目名”gradle project info”

    Google在2013年I/O大会上发布了Android Studio,AndroidStudio是一个基于IntelliJ思想的新的Android开发工具.下面介绍一下Android Studio安 ...

  10. HTTP与HTTPS异同/HTTP1.0与HTTP1.1差别

    HTTP状态码 分类 解释 描述 1XX 信息 服务器收到请求,需要请求者继续执行操作 2XX 成功 操作被成功接收并处理 3XX 重定向 需要进一步的操作以完成请求 4XX 客户端错误 请求包含语法 ...