码出个世界

导航

基本数据类型(dict)

一、简单概述一下字典:

是python中唯一的一个映射类型。它是以{ } 括起来的键值对组成。在dict中key是唯一的。在保存的时候,根据key来计算出一个内存地址。然后将key-value保存在这个地址中,这种算法被称为hash算法。所以切记,在dict中存储的key-value中的key必须是可hash的。

暂时认为可hash的不可改变。

  已知的可hash数据类型:int,str,tuple,bool

  不可hash的数据类型:list, dict,set

  语法:

  {key1:value1,key2:value2,...}

 

 1 # 合法 
 2 dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帅 哥', '美⼥女女'], (1, 2, 3): '麻花藤'} 
 3 print(dic[123])  #int型
 4 print(dic[True]) #bool型
 5 print(dic['id']) 
 6 print(dic['stu']) 
 7 print(dic[(1, 2, 3)]) 
 8 # 不不合法 
 9 # dic = {[1, 2, 3]: '周杰伦'}   # list是可变的. 不能作为key 
 10 # dic = {{1: 2}: "哈哈哈"}     # dict是可变的. 不能作为key 
 11 dic = {{1, 2, 3}: '呵呵呵'}    # set是可变的, 不能作为key

 

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

 

 

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

 

1.增加

dic={}
# dic[key]=value
dic['name'] = "魏嘉"
dic['school'] = "石家庄铁道大学"
print(dic)
#此种添加方法通俗易懂,可以添加无限组键值对到字典里面
dic.setdefault("key")
print(dic)
dic.setdefault("周杰伦") #当只有key时,value为None
print(dic)
dic.setdefault("周杰伦", "昆凌")#当dict中存在相应键值,setdefault无作用
print(dic)
dic.setdefault("小冰", "农大")
print(dic)
#一次最多添加一组键值对,否则报错

输出结果:

{'name': '魏嘉', 'school': '石家庄铁道大学'}
{'name': '魏嘉', 'school': '石家庄铁道大学', 'key': None}
{'name': '魏嘉', 'school': '石家庄铁道大学', 'key': None, '周杰伦': None}
{'name': '魏嘉', 'school': '石家庄铁道大学', 'key': None, '周杰伦': None}
{'name': '魏嘉', 'school': '石家庄铁道大学', 'key': None, '周杰伦': None, '小冰': '农大'}

2.删除

 

dic = {"id": 3, "name": "林俊杰", "school": "石家庄铁道大学", "location": "王岗"}
ret = dic.pop("id")  #pop(key)会删除括号内对应的键值对,同时返还键对应的值
print(dic)
print(ret)

del dic["name"]
print(dic)

 #随机删除
ret = dic.popitem() #这个随机删除也是删除括号内对应的键值对,同时返还键对应的值。但是随机删除
print(ret)
print(dic)

 #清空字典
dic.clear()
print(dic)

#删除字典
del dic
print(dic)

 

输出结果:

 

{'name': '林俊杰', 'school': '石家庄铁道大学', 'location': '王岗'}
3
{'school': '石家庄铁道大学', 'location': '王岗'}
('location', '王岗')
{'school': '石家庄铁道大学'}
{}

 

3.修改

dic = {"id": 1, "name": "王健林", "money": 999999}
dic["id"] = 88 #最简单的修改方法
print(dic)
dic["歌手"] = "邓紫棋"
print(dic)
dic1 = {"id": 3, "喜欢的人": "王力宏", "money": 100}
dic.update(dic1) #另一种方法update
print(dic)

输出结果:

{'id': 88, 'name': '王健林', 'money': 999999}
{'id': 88, 'name': '王健林', 'money': 999999, '歌手': '邓紫棋'}
{'id': 3, 'name': '王健林', 'money': 100, '歌手': '邓紫棋', '喜欢的人': '王力宏'}

4.查询

 

dic = {"SA": "隐身刺客", "TA": "圣堂刺客", "NA": "暗夜刺客"}
print(dic["SA"])
print(dic["TA"])  #只能一次得到一个值
# print(dic["GA"])   #没有相应的key值,则报错
print(dic.get("GA"))  #==> None
print(dic.get("GA", "炼金术士")) #  ==>炼金术士,给一个默认值,不是添加到dic里
print(dic.get("NA")) #只能一次得到一个值
print(dic.get("NA", "TA"))

 

输出结果:

隐身刺客
圣堂刺客
None
炼金术士
暗夜刺客
暗夜刺客

5.其他相关操作

 

dic = {"王力宏":"爱的就是你","孙燕姿":"同类","周杰伦":"晴天"}
 print(dic.keys()) #dict_keys(['王力宏', '孙燕姿', '周杰伦'])  不是列表,可当成list来用
 for key in dic.keys():
 print(key)
 print(dic.values())
 for value in dic.values():
 print(value)
 print(dic.items())   #dict_items([('王力宏', '爱的就是你'), ('孙燕姿', '同类'), ('周杰伦', '晴天')])
 for key,value in dic.items():
 print(key, value)

 

涉及知识:解构

a, b = 1, 2
print(a, b)   # 1 2
e, f, g = [1, 2, 3]
print(e,f,g)  #  1 2 3

三、字典的嵌套

 1 dic1 = {
  "name": "汪峰",
"age": 38,
  "wife": {
"name": '章子怡',
"age": 28    },
 "children": ['第一个毛孩⼦子', '第二个毛孩⼦子'],
     "desc": '峰哥不会告我吧. 没关系. 我想上头条的'
  }

print(dic1.get("wife").get("name"))

 

 

 

 

 

posted on 2021-08-20 15:42  码出个世界  阅读(708)  评论(0)    收藏  举报