python 基础 -05 基本数据类型(dict)

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

这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的,如果你搞不懂什么是可哈希,暂时可以这样记, 可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址⽽规定的.

已知的可哈希(不可变)的数据类型: int, str, tuple, bool,不可哈希(可变)的数据类型: 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)])

# 不合法
# dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不能作为key
# dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不能作为key
dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不能作为key

dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽hash表不是连续的. 所以不能进⾏切片⼯作. 它只能通过key来获取dict中的数据

⼆. 字典的增删改查和其他相关操作

2.1. 增加

2.2. 删除

2.3. 修改

2.4. 查询

查询⼀般⽤key来查找具体的数据. 

2.5. 其他相关操作

三. 字典的嵌套

 

# 字典的嵌套
dic1 = {
"name": "alex",
"age": 18,
"wife": {
"name": 'peiqi',
"age": 28
  }
}
print(dic1.get("wife").get("name"))

 

四. is和==的区别

4.1. id()
通过id()我们可以查看到⼀个变量表⽰的值在内存中的地址

⼩数据池(常量池): 把我们使⽤过的值存储在⼩数据池中.供其他的变量使⽤.
⼩数据池给数字和字符串使⽤, 其他数据类型不存在.
对于数字: -5~256是会被加到⼩数据池中的. 每次使⽤都是同⼀个对象.
对于字符串:

1. 如果是纯⽂字信息和下划线. 那么这个对象会被添加到⼩数据池

2. 如果是带有特殊字符的. 那么不会被添加到⼩数据池. 每次都是新的

3. 如果是单⼀字⺟*n的情况. 'a'*20, 在20个单位内是可以的. 超过20个单位就不会添加到⼩数据池中

注意(⼀般情况下): 在py⽂件中. 如果你只是单纯的定义⼀个字符串. 那么⼀般情况下都是会
被添加到⼩数据池中的. 我们可以这样认为: 在使⽤字符串的时候, python会帮我们把字符串
进⾏缓存, 在下次使⽤的时候直接指向这个字符串即可. 可以节省很多内存

id()和is有什么关系呢. 注意. is比较的就是id()计算出来的结果. 由于id是帮我
们查看某数据(对象) 的内存地址. 那么is比较的就是数据(对象)的内存地址.
最终我们通过is可以查看两个变量使⽤的是否是同⼀个对象.

== 双等表⽰的是判断是否相等, 注意. 这个双等比较的是具体的值.⽽不是内存地址

总结:
is 比较的是地址
== 比较的是值

五.字典补充

dict中的fromkey(),可以帮我们通过list来创建⼀个dict

前⾯列表中的每⼀项都会作为key, 后⾯列表中的内容作为value. ⽣成dict
好了. 注意:

代码中只是更改了jay那个列表. 但是由于jay和JJ⽤的是同⼀个列表. 所以. 前⾯那个改了. 后
⾯那个也会跟着改

dict中的元素在迭代过程中是不允许进⾏删除的

那怎么办呢? 把要删除的元素暂时先保存在⼀个list中, 然后循环list, 再删除

类型转换:
元组 => 列表 list(tuple)
列表 => 元组 tuple(list)
list=>str str.join(list)
str=>list str.split()

转换成False的数据:
0,'',None,[],(),{},set() ==> False

 

posted on 2018-11-22 11:42  等鱼来~  阅读(115)  评论(0)    收藏  举报

导航