1.12 dict 字典表

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  # 1 字典表的复制
 2 >>> man1
 3 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Mark‘}
 4 >>> man = man1.copy()
 5 >>> man
 6 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Mark‘}
 7 >>>
 8
 9  # 2 清空字典表中的键值对
10 >>> man.clear()
11 >>> man
12 {}
13 >>>
14
15  # 3 修改dict中键值对中键对应的值
16 >>> man1
17 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Mark‘}
18 >>>
19 >>> man1[‘name‘] = ‘Tony‘
20 >>> man1
21 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘}
22 >>>
23
24  # 4 拼接两个dict
25 >>> d = dict(staff_id = ‘111111‘,post_id = ‘222222‘)
26 >>> d
27 {‘staff_id‘: ‘111111‘, ‘post_id‘: ‘222222‘}
28 >>>
29 >>> man1.update(d)
30 >>> man1
31 {‘weight‘: 80, ‘height‘: 1.8, ‘staff_id‘: ‘111111‘, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘}
32 >>>
33
34  # 5 删除dict中的键值对
35  # 5.1 用全局函数 del()
36 >>> man1
37 {‘weight‘: 80, ‘height‘: 1.8, ‘staff_id‘: ‘111111‘, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘}
38 >>>
39 >>> del man1[‘staff_id‘]
40 >>> man1
41 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘}
42 >>>
43 >>> #如果要删除的键值对的键在dict中不存在会如何
44 >>> del man1[‘staffpost‘]
45 Traceback (most recent call last):
46   File "<pyshell#132>", line 1, in <module>
47     del man1[‘staffpost‘]
48 KeyError: ‘staffpost‘
49 >>>
50
51  # 5.2 用dict自带的pop()函数进行键值对的删除
52 >>> man1
53 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘}
54 >>> man1.pop(‘post_id‘)
55 ‘222222‘
56 >>> man1
57 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘}
58 >>>
59
60 >>> man1
61 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘, ‘post_id‘: ‘222222‘}
62 >>> man1.pop(‘post_id‘)
63 ‘222222‘
64 >>> man1
65 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘}
66 >>>
67 >>> #如果要弹出的键不存在
68 >>> man1.pop(‘staffpost‘)
69 Traceback (most recent call last):
70   File "<pyshell#140>", line 1, in <module>
71     man1.pop(‘staffpost‘)
72 KeyError: ‘staffpost‘
73 >>>
74 >>> #pop()函数可以再加一个参数,用来在键不存在的时候输出,代替报错:KeyError
75 >>> man1.pop(‘staffpost‘,‘该键不存在哦‘)
76 ‘该键不存在哦‘
77 >>>
78
79  # 6 获取字典表的键值对数目
80 >>> man1
81 {‘weight‘: 80, ‘height‘: 1.8, ‘name‘: ‘Tony‘}
82 >>> len(man1)
83 3
84 >>> 

原文地址:https://www.cnblogs.com/avention/p/8274203.html

时间: 2024-08-03 06:03:51

1.12 dict 字典表的相关文章

Python零基础入门(11)-------dict 字典表

dict 字典表属于映射的数据类型 特性:通过键(key),而不是通过下标访问数据 包含任意对象的无序集合 可变长度,可任意嵌套 属于"可变映射" 分类 对象引用表(Hash Table) 声明:   d = { } 是一个空的字典表.字典表是一个 {key: value} 的形式.key 只能是不可变的元素(可变类型List就不可以). 从下面图片你也可以看出 dict 字典表 是一个无序的集合.是通过内部Hash算法排序的 key 只能是不可变类型的数据.可变类型就会抛出错误信息

redis底层数据结构之dict 字典1

最近,我想通过redis的源码来学习redis.虽然平时工作中用得不多,不过对redis还是比较感兴趣的,毕竟它的性能是不错的.redis是一个 开源的项目,我们可以通过源代码去了解redis.我后面会通过自己的学习,写一些关于redis源码的帖子.帖子的主要内容是分析代码设计,而并不会对 源码进行详细解说.如果有不对的地方,请指正.源码是reids 3.0.3版本. dict 字典 一.数据结构 //字典条目 typedef struct dictEntry {     void *key;

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

参考:http://www.jianshu.com/p/8887b3b3e8ba 代码 namespace 解决Switch { class Program { delegate string func(); static void Main(string[] args) { var dict = new System.Collections.Generic.Dictionary<string, func>(); dict["apple"] = new func(apple

oracle数据转换方法,将字典表的id值以文本形式展示

(本文原创,引用请注明出处--zhangjieatbky) 应用场景:例如,将某字段中存放的id值,如1,2,3转换成文本展示,如 篮球.足球.排球 创建两张表 1 create a1(id number(8),text varchar(15)); //创建字典表 2 insert into a1 values(10,足球); 3 insert into a1 values(11,篮球); 4 insert into a1 values(12,羽毛球); 5 insert into a1 val

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

因为在前端要根据字典表中的数据去将1.2这些值转换成对应的文字解释 1.首先要创建一个类去实现 TemplateDirectiveModel 类 @Component public class DictDirective implements TemplateDirectiveModel { @Override public void execute(Environment environment, Map map, TemplateModel[] templateModels, Templat

python dict 字典详解

和列表相同,字典也是许多数据的集合,属于可变序列类型.不同之处在于,它是无序的可变序列,其保存的内容是以“键值对”的形式存放的. 字典中,习惯将各元素对应的索引称为键(key),各个键对应的元素称为值(value),键及其关联的值称为“键值对”. 字典类型很像学生时代常用的新华字典.我们知道,通过新华字典中的音节表,可以快速找到想要查找的汉字.其中,字典里的音节表就相当于字典类型中的键,而键对应的汉字则相当于值. 表 1 Python 字典特征 主要特征 解释 通过键而不是通过索引来读取元素 字

如何通过字典表来获取下拉数据的实现

①在web.xml中添加监听,启动的时候初始化. <!--Web ApplicationContext 载入,继承处Spring的ApplicationContextListener --> <listener> <listener-class>cn.sccl.common.web.StartupListener</listener-class> </listener> ②我们需要在启动Tomcat的时候,初始化bizCode数据 package

4.Dict字典

'''Dict 字典存储的是key-value键值对形式的值特点: 1.无序,因为无下标 2.key值是唯一的,自动去重''' person = { "name":"xiaoming", "age" : 20} #根据key查询值print(person["name"])print(person["age"])print(person.get("name","没有")

GreenPlum之生成月份字典表

--生成月份字典表 drop table if exists monthmapping; create table monthmapping as select cast(to_char(onday,'yyyymm') as integer) monthid,onday from ( select cast('2001-01-01 00:00:00' as timestamp) + (c ||' day')::interval as onday from generate_series(0,10