Python入门(二) part3 字典

一、定义

字典属于任凭其对象,是无序的 键:值(key:value)对集合

键可以是python中任意不可变数据(整数、浮点数、字符串、元组等),但不能是可变数据(列表、字典)或包含可变元素的不可变数据(如包含列表的元组等)。同一个字典内的键不允许重复,值允许重复

字典 定义语法为{元素1,元素2,元素3, ... ,元素n}

  • 其中每一个元素是一个「键值对」-- 键:值 (key:value)
  • 关键点是「大括号 {}」,「逗号 ,」和「冒号 :」
  • 大括号 -- 把所有元素绑在一起
  • 逗号 -- 将每个键值对分开
  • 冒号 -- 将键和值分开

字典的特征:

  • dict 内部存放的顺序和 key 放入的顺序是没有关系的,所以没有下标取元素一说。
  • dict 查找和插入的速度极快,不会随着 key 的增加而增加,但是需要占用大量的内存。

二、字典的创建

1.直接大括号{}创建

通过字符串或数值作为key来创建字典。

dic1 = {1:'1',2:'2',3:'3',4:'4'} #用整数和字符串作为字典的键和值
print(dic1) 
print(dic1[1])   
print(dic1[4])  
print('='*30)

dic2 = {(1, 2, 3): "A", "B": 12, 3: [3, 5, 7]}  #用元组作为键来创建字典,可行但一般不用
print(dic2)
print(dic2[(1,2,3)])

'''
{1: '1', 2: '2', 3: '3', 4: '4'}
1
4
==============================
{(1, 2, 3): 'A', 'B': 12, 3: [3, 5, 7]}
A
'''

*注意:上图的dic1[1]等语句不是用下标取元素,而是用键取值,输入的键不在字典中时会报错v

2.dict()创建字典

  • dict(**kwargs)     **kwargs -- 关键字
  • dict(mapping)     mapping -- 元素的容器,映射类型

通过key直接把数据放入字典中,但一个key只能对应一个value,多次对一个key放入 value,后面的值会把前面的值冲掉。也可以将mapping对象转换为字典类型数据

#dict()形式
dic_1 = dict()    #创建空字典

#dict(*kwargs)形式
dic_2 = dict(name='张三', age=18, sex='M')   #等号连接键和值
dic_3 = dict(a=1, b='b', t='t')  #键只能为字符串类型,并且创建的时候字符串不能加引号

#dict(mapping)形式
dic_4 = dict([(1,'1'),(2,'two'),(3,'3')])
dic_5 = dict(((1,2),(3,'4')))
dic_6 = dict(zip('abcd',[1,2,3,4]))

print(dic_1)
print(dic_2)
print(dic_3) 
print(dic_4)
print(dic_5) 
print(dic_6)

'''
{}
{'name': '张三', 'age': 18, 'sex': 'M'}
{'a': 1, 'b': 'b', 't': 't'}
{1: '1', 2: 'two', 3: '3'}
{1: 2, 3: '4'}
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
'''

3.内置方法创建

dict.fromkeys(seq[,value])

用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。

data1 = dict.fromkeys([1, 2, 3, 4])    #以指定数据为键,值为空
data2 = dict.fromkeys([1,2,3,4],'初始值')

print(data1)  
print(data2)

'''
{1: None, 2: None, 3: None, 4: None}
{1: '初始值', 2: '初始值', 3: '初始值', 4: '初始值'}
'''

三、字典元素的访问

1.把键作为下标直接访问

dic_1 = {'第一个':'1','第二个':2,'第三个':'3'}
dic_1['第三个']  # '3'

2.获取键对应的值

  • dict.get(key, default=None)    返回指定键的值,如果值不在字典中返回默认值。
  • dict.setdefault(key, default=None)  和 get() 方法类似

get()方法用来获取键对应的值,如果键不存在,get()方法会返回空值或指定的值

dic = dict(name='张三',age=18,sex='M')
print(dic.get('name'))
print(dic.get(''))
print(dic.get('2','不存在'))
print(dic.setdefault('5','None~'))  #同get()

'''
张三
None
不存在
​None~
'''

3.获取字典所有的键/值

  • dict.keys()   获取字典所有的键
  • dict.values()   获取字典所有的值
  • dict.items()   获取字典所有的元素
dic = dict(name='张三',age=18,sex='M')
print(dic.keys())   #dic.keys()返回字典所有键
print(dic.values())  #dic.values()返回字典所有值
print(dic.items())    #dic.items()返回字典所有元素

for key,value in dic.items():
    print(key,value,sep='\t')

'''
dict_keys(['name', 'age', 'sex'])
dict_values(['张三', 18, 'M'])
dict_items([('name', '张三'), ('age', 18), ('sex', 'M')])
name	张三
age	18
sex	M
'''

四、字典元素的修改

1.指定键为下标赋值

当指定的键存在于原字典时,修改该键对应的值;如果指定的键不存在时,表示添加一个元素

dic = dict(name='张三',age=18,sex='M')
dic['name'] = '李四'      #修改已有元素的值
dic['number'] = 10       #添加的元素
print(dic)

'''
{'name': '李四', 'age': 18, 'sex': 'M', 'number': 10}
'''

2.dict.update()

update()方法可以将另一个字典的元素一次性全部添加到当前字典中,如果两个字典中存在相同的键,则以另一个字典中的值为准,对当前字典进行更新

dic = dict(name='张三',age=18,sex='M')
dic.update({'name':'李四','age':20})
print(dic)
dic.update({'number':10,'home':None})
print(dic)

'''
{'name': '李四', 'age': 20, 'sex': 'M'}
{'name': '李四', 'age': 20, 'sex': 'M', 'number': 10, 'home': None}

'''

3.删除元素

  • dict.pop(key[,default])   删除给定键 key 所对应的值并返回。若key不存在,则回 default 值。
  • dict.popitem()  随机返回并删除字典中的一对键和值,若字典已空则报错
  • del dict[key]   删除给定键 key 所对应的值
  • dict.clear()  删除字典内所有元素。
dic = dict(name='张三',age=18,sex='M',home='None')

dic.pop('name')
print(dic.pop('number','不存在该键'))
print(dic)

dic.popitem()
print(dic)

del dic['sex']
print(dic)

dic.clear()
print(dic)

'''
不存在该键
{'age': 18, 'sex': 'M', 'home': 'None'}
{'age': 18, 'sex': 'M'}
{'age': 18}
{}
'''

4.复制字典

dict.copy()   返回一个字典的浅复制,父对象(一级目录),子对象(二级目录,如字典中的列                          表、元组等)不拷贝,还是引用

#dict.copy() 返回一个字典的浅复制。
dic = {1:'1',2:'2',3:[1,2,3]}
dic_1 = dic          #引用
dic_2 = dic.copy()   #浅拷贝

print(id(dic) == id(dic_1))
print(id(dic) == id(dic_2))  

dic[1] = '0'        #dic一级目录改变,dic_1改变,dic_2不变
dic[3][0] = 0       #dic二级目录改变,dic_1和dic_2均改变

print(dic_1)
print(dic_2)

'''
True
False
{1: '0', 2: '2', 3: [0, 2, 3]}
{1: '1', 2: '2', 3: [0, 2, 3]}
'''


                    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值