python 字典数据类型_python数据类型三(字典)

一、字典的介绍

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

已知的可哈希(不可变)的数据类型:int,str,bool,tuple

不可哈希(可变)的数据类型: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)])#不合法

dic1 = {[1, 2, 3]: '周杰伦'} #list是可变的. 不能作为key

dic2 = {{1: 2}: "哈哈哈"} #dict是可变的. 不能作为key

dic3 = {{1, 2, 3}: '呵呵呵'} #set是可变的. 不能作为key

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

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

2.1 增

字典的增加操作有:dic[key] = value,dic.setdefault(key, value),具体用法如下示例:

dic ={}

dic['name'] = '周润发' #如果dict中没有出现这个key, 就会新增一个key-value组合,如果dict中已经有这个key了,那么将会覆盖原来的值

dic['age'] = 18

print(dic) #结果为:{'name':'周润发', 'age':18}

#如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值

dic.setdefault('李嘉诚') #也可以往里面设置值,dict中增加键值对 "李嘉诚":None,返回值是None

print(dic) #结果为:{'name':'周润发', 'age':18, '李嘉诚':None}

dic.setdefault("李嘉诚", "房地产") #如果dict中已经有这个key了. 那么setdefault将不会起作用,返回值是这个key对应的dict中的value值

print(dic) #结果为:{'name':'周润发', 'age':18, '李嘉诚':None}

dic.setdefault("李嘉", "18") # dict中增加键值对 "李嘉":"18",返回值是18print(dic) #结果为:{'name':'周润发', 'age':18, '李嘉诚':None, '李嘉':'18'}

2.2 删除

字典的删除操作有:pop[key],del dic[key],popitem(),clear,具体用法如下示例:

dic = {"jay":"who", "i":"wang", "zhao":"jie", "niu":"li"}

ret= dic.pop("jay") #pop有返回值,返回被删除的value值

print(ret) #结果为:who

del dic["i"]print(dic) # {'zhao':'jie','niu':'li'}

ret= dic.popitem() #随机删除,返回一个元组(删除的key , 删除的value),可以用解构 k , v = dic.popitem()

print(ret) #结果为:('niu', 'li')   dic.clear() # 清空字典

print(dic) #{}

dic.pop()必须有一个参数key,即要删除的元素的key,否则报错,而list.pop()不带参数默认删除最后一个元素。

2.3 修改

字典的修改操作有:dic[key] = value,dic.update(),具体如下示例代码:

dic0 = {"1":"张三", "2":"李四"}

dic0["2"] = "王五" #强制修改

print(dic0) #结果为:{'1':'张三', '2':'王五'}

dic= {"id":123, "name":'sylar', "age":18}

dic1= {"id":456, "name":"麻花藤", "ok":"wtf"}

dic.update(dic1)#把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增.

print(dic) #结果为:{'id':456, 'name':'麻花藤', 'age':18, 'ok':'wtf'}

print(dic1) #结果为:{'id':456, 'name':'麻花藤', 'ok':'wtf'}

2.4 查询

查询一般用key来查找具体的数据,如get(key),dic[key],setdefault(key),还有for循环,具体如下:

dic = {"id": 123, "name": 'sylar', "age": 18}print(dic['name'])#print(dic['ok']) # 没有这个键的时候会报错 KeyError

print(dic.get("ok")) #没有这个键的时候返回None

print(dic.get("ok", "牛B")) #没有这个键时,第二参数可以指定返回内容,原dict内容不变,此打印结果为:牛B

print(dic.setdefault("ok")) #没有这个键的时候会为dict增加键值对"ok":None,并返回None,即此打印结果是None

dic = {"id":123, "name":"sylar" , "age":18}for i indic:print(i) #获取到的是 key

print(dic[i]) #获取到的 value

2.5 其他操作

keys     获取到所有的键存在一个高仿的列表中;

values   获取到所有的值存在一个高仿的列表中;

items    获取到所有的键值对以元组的形式存在一个高仿的列表中;

具体用法如下示例:

dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科比"}print(dic.keys())#结果为:dict_keys(['id', 'name', 'age', 'ok']) 不用管它是什么.当成list来用就行

for key indic.keys():print(key)print(dic.values())#结果为:dict_values([123, 'sylar', 18, '科比']) 不用管它是什么.也当list来用

for value indic.values():print(value)print(dic.items())#结果为:dict_items([('id', 123), ('name', 'sylar'), ('age', 18), ('ok', '科比')]),这个东西也是list.只不过list中装的是tuple

for key,value in dic.items(): #这个是解构

print(key, value)#解构:将后边解构打开按位置赋值给变量,支持:字符串、列表、元组

a, b = 1, 2

print(a, b) # 1 2

(c, d) = 3, 4

print(c, d) # 3 4

e, f= [1, 2, 3] #解构的时候注意数量必须匹配,所以这样写不对

三、字典的嵌套

字典的嵌套示例如下:

#字典的嵌套

dic1 ={"name": "汪峰","age": 43,"wife": {"name": '章子怡',"age": 39},"children": ['第一个孩子', '第二个孩子'],"desc": '峰哥不会告我吧. 没关系的'}print(dic1.get("wife").get("name"))print(dic1.get("children"))print(dic1.get("children")[1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值