dict 字典表属于映射分类

dict的声明

>>> #dict类型 是 {}中包含若干个键值对
>>> d = dict()
>>> d = {}
>>> type(d)
<class 'dict'>
>>> #看来 一个键值对也没有的{}也是dict类型的
>>>
>>> # 1 用{}来声明键值对
>>> man = {'name':'Mark','height':1.8,'weight':80}
>>> #创建这个dict类型对象man 用来记录一个人的基本信息,姓名、身高、体重
>>>
>>> # 2 用dict()函数将参数转化为dict数据类型
>>> man1 = dict('name'='Mark','height'=1.8,'weight'=80)
SyntaxError: keyword can't be an expression
>>> man1 = dict(name='Mark',height=1.8,weight=80)
>>> man1
{'weight': 80, 'height': 1.8, 'name': 'Mark'}
>>>
>>>
>>> # 3 将list类型的转化为dict
>>> l = [('name','Mark'),('weight',80)]
>>> d = dict(l)
>>> d
{'weight': 80, 'name': 'Mark'}
>>>
>>> # 4 将tuple类型的转化为dict
>>> t = (('name','Mark'),('weight',80))
>>> dd = dict(t)
>>> dd
{'weight': 80, 'name': 'Mark'}
>>>
>>>
>>> # 5 创建只有键,值全部为None的dict
>>> keys = ['name','weight','height']
>>> ddd = dict.fromkeys(keys)
>>> ddd
{'weight': None, 'name': None, 'height': None}
>>>
>>>#特别说明,字典表的键必须是不可变类型的
#目前所学的字典表中的键值对都是无序的

获取dict中的键值对

# 1 判断一个键是否在dict中存在
>>>man1 = dict(name='Mark',height=1.8,weight=80)
>>> 'name' in man1
True
>>> 'Name' in man1
False
>>> 

# 2 访问dict中某一个建的值
>>> man1['name']
'Mark'
>>>
>>> #这样访问很方便,但要确定键是存在的,不然会报错
>>> man1['Name']
Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    man1['Name']
KeyError: 'Name'
>>> 

# 为了使键在dict中不存在时获取键的值时不会报错或者提示一些个性化定制的信息时,可用get()函数
>>> man1.get('name')
'Mark'
>>>
>>> man1.get('Name')
>>> man1.get('Name','这个键在字典表中不存在哦')
'这个键在字典表中不存在哦'
>>>

# 3 嵌套的字典的元素访问
>>> man = {'name':{'姓':'王','名':'大锤'}}
>>> #如果想获得姓
>>> a = man['name']
>>> a
{'姓': '王', '名': '大锤'}
>>> b = a['姓']
>>> b
'王'
>>>
>>> #把这两步合在一起就是
>>> man['name']['姓']
'王'
>>> 

# 4 dict中的键值对的遍历
# 4.1 获取dict中的键
>>> man1.keys()
dict_keys(['weight', 'height', 'name'])
>>> 

# 4.2 获取dict中的值
>>> man1.values()
dict_values([80, 1.8, 'Mark'])
>>> 

# 4.3 获取dict中的键值对
>>> man1.items()
dict_items([('weight', 80), ('height', 1.8), ('name', 'Mark')])
>>> 

# 4.1、4.2、4.3中获取都是可迭代对象,不仅可以用来转换成其他类型的可迭代对象,还可以用来遍历
# 4.4 将 man1.values()转换成list类型
>>> list(man1.values())
[80, 1.8, 'Mark']
>>> 

# 4.5 遍历man1.values()
>>> for i in man1.values():
    print(i)

80
1.8
Mark
>>> 

# 4.6 man1.items()返回的是键值对,如果遍历时想对键值对中的键、值分别操作,可以如下操作
>>> for k,v in man1.items():
    print(k,'----',v)

weight ---- 80
height ---- 1.8
name ---- Mark
>>>
# 对,就是这样,从man1.items()取出的一个键值对的形式是('weight', 80),这个形式不就是元组嘛
#所以 k,v in man1.items() 就是把取出的每一个键值对组成的元组的第一个元素赋值给k,第二个元素赋值给v,而第一个
第二个元素分别就是键值对的键、值

dict的特性

特性 一:通过键(key),而非索引访问数据。k-v键值对
特性 二:值为任意对象的无序集合,而键必须是不可变类型的数据类型
特性 三:可变长度(键值对的对数是可改变的),异质(值可以是不同的数据类型),可任意嵌套(值还可以是一个dict,并且可以嵌套n多层)
特性 四:属于'可变映射'分类
特性 五:对象引用表(Hash Table),这个类似于list中的元素的访问法方式,dict中的键和作为值的对象的物理地址绑定在一起,这样通过键就能找到值

 
字典表的常用操作

  # 1 字典表的复制
 >>> man1
 {'weight': 80, 'height': 1.8, 'name': 'Mark'}
 >>> man = man1.copy()
 >>> man
 {'weight': 80, 'height': 1.8, 'name': 'Mark'}
 >>> 

  # 2 清空字典表中的键值对
 >>> man.clear()
 >>> man
 {}
 >>> 

  # 3 修改dict中键值对中键对应的值
 >>> man1
 {'weight': 80, 'height': 1.8, 'name': 'Mark'}
 >>>
 >>> man1['name'] = 'Tony'
 >>> man1
 {'weight': 80, 'height': 1.8, 'name': 'Tony'}
 >>> 

  # 4 拼接两个dict
 >>> d = dict(staff_id = ')
 >>> d
 {'}
 >>>
 >>> man1.update(d)
 >>> man1
 {'}
 >>> 

  # 5 删除dict中的键值对
  # 5.1 用全局函数 del()
 >>> man1
 {'}
 >>>
 >>> del man1['staff_id']
 >>> man1
 {'}
 >>>
 >>> #如果要删除的键值对的键在dict中不存在会如何
 >>> del man1['staffpost']
 Traceback (most recent call last):
   File "<pyshell#132>", line 1, in <module>
     del man1['staffpost']
 KeyError: 'staffpost'
 >>> 

  # 5.2 用dict自带的pop()函数进行键值对的删除
 >>> man1
 {'}
 >>> man1.pop('post_id')
 '
 >>> man1
 {'weight': 80, 'height': 1.8, 'name': 'Tony'}
 >>> 

 >>> man1
 {'}
 >>> man1.pop('post_id')
 '
 >>> man1
 {'weight': 80, 'height': 1.8, 'name': 'Tony'}
 >>>
 >>> #如果要弹出的键不存在
 >>> man1.pop('staffpost')
 Traceback (most recent call last):
   File "<pyshell#140>", line 1, in <module>
     man1.pop('staffpost')
 KeyError: 'staffpost'
 >>>
 >>> #pop()函数可以再加一个参数,用来在键不存在的时候输出,代替报错:KeyError
 >>> man1.pop('staffpost','该键不存在哦')
 '该键不存在哦'
 >>> 

  # 6 获取字典表的键值对数目
 >>> man1
 {'weight': 80, 'height': 1.8, 'name': 'Tony'}
 >>> len(man1)
 3
 >>> 
 
 
 

1.12 dict 字典表的更多相关文章

  1. 第三天:字典表dict、元组tuple、文件与类型汇总

    1.字典表dict 声明 {键: 值,...} dict(键=值) d = {'isbn':'13123','title':'python入门'} #字典表中的键不能使用诸如列表这种可以改变的,只能使 ...

  2. Redis原理再学习04:数据结构-哈希表hash表(dict字典)

    哈希函数简介 哈希函数(hash function),又叫散列函数,哈希算法.散列函数把数据"压缩"成摘要,有的也叫"指纹",它使数据量变小且数据格式大小也固定 ...

  3. python的dict()字典数据类型的方法详解以及案例使用

    一.之前的回顾 # int  数字 # str 字符串 # list 列表 # tuple 元组 # dict 字典 字典中最重要的方法 keys() values() items() get upd ...

  4. 数据类型:list列表[]、元祖tuple()、dict字典{}

    List 列表[] 可变的 lst = [1,2,3,4] #改 lst[(元素下标)] = '需要修改的' #通过下表修改 lst[下标:下标] = '需要修改的' #通过范围修改 #加 lst.a ...

  5. Python 全栈开发:dict(字典)常用方法操作、dict嵌套

    数据类型的划分:可变数据类型和不可变数据类型. 不可变数据类型(可哈希):元祖.bool.int.str 可变数据类型(不可哈希):list.dict,set(集合) dict(字典): dict(字 ...

  6. 字典表+委托替代switch解决思路

    参考:http://www.jianshu.com/p/8887b3b3e8ba 代码 namespace 解决Switch { class Program { delegate string fun ...

  7. SpringBoot整合freemarker中自定义标签获取字典表的数据

    因为在前端要根据字典表中的数据去将1.2这些值转换成对应的文字解释 1.首先要创建一个类去实现 TemplateDirectiveModel 类 @Component public class Dic ...

  8. dict字典

    dict字典 字典的概述 • 概述:使⽤键-值(key-value)⽅式存储. • key的特点: • 1.字典中的key必须是唯⼀的 • 2.key值必须是不可变的数据类型:字符串.元组.Numbe ...

  9. 探讨VMP 2.12.3 导入表修复

    壳版本:VMProtect.Ultimate.2.12.3 样本:notepad.exe 目的:IAT修复 作者:MrWrong 标题:探讨VMP 2.12.3 导入表修复 只是感兴趣,没有其他目的. ...

随机推荐

  1. python 操作python

    #!/usr/bin/env python#_*_ coding:utf-8 _*_ import MySQLdb # 打开门conn = MySQLdb.connect(host='192.168. ...

  2. python_如何去除字符串中不想要的字符?

    问题: 过滤用户输入中前后多余的空白字符 '    ++++abc123---    ' 过滤某windows下编辑文本中的'\r': 'hello world \r\n' 去掉文本中unicode组 ...

  3. java乱码详解(java中byte与char的转换)

    转自:http://hi.baidu.com/%C6%F3%D2%B5%BC%D2%D4%B0/blog/item/825a4858d6248e8b810a181a.html   java byte与 ...

  4. android webview加载网络连接

    webview = (WebView) findViewById(R.id.webview); WebSettings webSettings = webview.getSettings(); //设 ...

  5. Struts2 (二)

    1 自定义结果视图 1.1 自定义一个类实现com.opensymphony.xwork2.Result接口. package com.xuweiwei.action; import com.open ...

  6. AM调制的FPGA实现

    一.说明: 功能:AM调制 平台:Vivado 2016.4 和 Matlab R2017a 二.原理: 1. AM调制原理 AM已调信号的时域表达式: 已调信号的频域表达式: 本质上AM调制就是频谱 ...

  7. TCP粘包和拆包问题

    问题产生 一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和封包问题. 下面可以看一张图,是客户端向服务端发送包: 1. 第一种情况 ...

  8. fread和fwrite的使用

    fread和fwrite的使用 fread和fwrite一般用于二进制文件的输入/输出,要不然你打开fwrite写入的文件就是乱码. 1.fread和fwrite函数 数据块I/O fread与fwr ...

  9. 所不为人知的Python装饰器

    装饰器可以说是Python中非常重要的特性之一.有些人要么从没使用过装饰器,要么就是对装饰器的使用一知半解.也有些人觉得装饰器很简单:"装饰器不就是那些把函数作为参数并输出一个函数的函数&q ...

  10. 不依赖jstack的java 线程dump和死锁检查工具

    java线程dump可以使用jdk的命令"jstack  pid"完成,死锁检查可以用jconsole查看到.这两个工具是java调试的常用方法. 我遇到的问题是:在sles11s ...