基本数据类型(dict)

基本数据类型(dict)字典(键值对)

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

  • 格式: dict = {key1: value1, key2: value2....}
  • 已知的可哈希(不可变)的数据类型: int, str, tuple, bool
  • 不可哈希(可变)的数据类型: list, dict, set

字典的特性 :git

  • 查询的效率很是高, 经过key来查找元素
  • 字典比较消耗内存 最长用的数据: 字符串 列表 字典
  • 字典可以将数据进行关联
  • dict保存的数据不是按照咱们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽hash表 不是连续的. 因此不能进⾏切片⼯做. 它只能经过key来获取dict中的数据

字典的增删查改

增长

setdefault(设置默认值) dic.setdefault(key,value) 格式用逗号隔开

直接用key添加

dic = {}
dic['name'] = '周润发' # 若是dict中没有出现这个key, 就会新增⼀个key-value的组合进dict
dic['age'] = 18
print(dic)
# 若是dict中没有出现过这个key-value. 能够经过setdefault设置默认值
dic.setdefault('李嘉诚') # 也能够往⾥⾯设置值.
print(dit) #  打印出来是 {'李嘉诚':None}
dic.setdefault("李嘉诚", "房地产") # 若是dict中已经存在了. 那么setdefault将不会起做⽤
print(dic)  #这时出现的是依旧是 {'李嘉诚':None}

删除

pop 弹 指定key 删除

  • dit.pop(key)

popitem 随机删除

  • dit.popitem() 3.5版本之后默认删除最后一个

del 指定删除

  • del dit[key] 字典没有索引 只能根据key去删除

clear 清空

  • dit.clear() 清空字典

修改

利用key去修改

update 更新 (用新的dict去跟新)

第一种 :利用key去修改:
dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙"}
dic['王木生'] = "刘伟" 
print(dic)
# 结果: {"刘能": "王小利", "赵四": "刘晓光", "王木生": "刘伟", "谢大脚": "于月仙"}

第二种 :  update  更新
dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙"}
dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰","王大拿": "金老板"}
dic.update(dic2)
print(dic)
#结果 :{"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "于月仙","王大拿": "金老板"}     # 旧的覆盖,没改的不动,新加的补到最后

查询

直接用key

  • print(dic[key]) 若是key不存在会报错

get 方法 dic.get(key,xx)key不存在,会显示xx

  • print(dic.get(key))
若是key("sylar")不存在
第一个  print(dic.get("sylar")) # None  系统默认会显示None
print(dic.get("sylar", "⽜B"))  # ⽜B   若是key不存在,第二个逗号会显示出 "⽜B"

setdefault() 新增后查询

  • 新增(先看有没有key, 若是有就过, 若是没有,执行新增)
  • 根据key把值返回,值也是新增也行是旧的
  • 第一步 : 执行新增流程. 第二步 : 查询结果
dic = {}
dic["盖伦"] = "德玛西亚之力"
value = dic.setdefault("菲奥娜", "无双剑姬")  # 新增
value2 = dic.setdefault("盖伦", "刘伟")  # 因为已经存在了key。 因此新增不执行。 直接查询结果
value3 = dic.setdefault("薇恩", "坑")

print(value3)  结果 : "坑"
print(dic)
结果 : {"盖伦":"德玛西亚之力","菲奥娜":"无双剑姬","薇恩": "坑"}

其余相关操做

字典的遍历方式

  • dic遍历时,keys至关因而字典的索引,values能够当作keys对应的元素
#  对字典的遍历 :
dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"}
第一种:
#   print(dic.keys())   # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表
for key in dic.keys():
    print(key)  # 拿到key
    print(dic[key]) # 拿到value
第二种(最简化):
#   print(dic.items())  # 拿到的是key和value
for k, v in dic.items(): # 当须要遍历字典. 在操做中涉及到key和value的时候.
    print(k) # 元组的keys
    print(v) # 元组的与keys对应的values
第三种(经常使用):
字典自己是一个可迭代对象,能够直接进行for循环
for el in dic:  # 直接拿到key
    print(el)   # keys
    print(dic[el])  # values
打印元组:
for item in dic.items():
    print(item) # 打印出的结果是 dic里每个(key:value)

enumerate 枚举 (,默认从0开始计) (相似range)

dic = {1:11,2:22,3:33,4:44,5:55,6:66,7:77,8:88,}
for i in enumerate(dic,1): # 也能够是dic.values / items
    print(i)
# 打印结果 (默认显示的是keys)
(1, 1)
(2, 2)
(3, 3)
(4, 4)
(5, 5)
(6, 6)
(7, 7)
(8, 8)
解包和枚举
s = "wtf"
d = {}
for i, d[i] in enumerate(s):
    pass
print(d)# 打印结果: {0:"w",1:"t",2:"f"}
  • keys() 获取全部键 这个返回的不是列表, 很像列表
  • values()获取全部的值
  • items() 获取全部的键值对. 返回的是元组

解构

  • 解构, 直接把元组或者列表中的数据拿出来.
  • dict解包出来是 key
# 解构
a, b = 1, 2
print(a, b)
(c, d) = 3, 4
print(c, d)
e, f = [1, 2, 3] # 解构的时候注意数量必须匹配
print(e, f)

字典的嵌套

与list类似,索引换成keygithub

# 字典的嵌套
dic1 = {
 "name": "汪峰",
 "age": 18,
 "wife": {
 "name": '章⼦怡',
 "age": 28
 },
 "children": ['第⼀个⽑孩⼦', '第⼆个⽑孩⼦'],
 "desc": '峰哥不会告我吧. 不要紧. 我想上头条的'
}
print(dic1.get("wife").get("name"))
相关文章
相关标签/搜索