Python 学习3-字典

五、字典

序列以连续整数为索引,字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串和数值,字典是python中唯一一个的映射类型,字符串、元组、列表属于序列类型
(1)可变与不可变

  1. id
    id(x)函数,对x进行操作后,id值不变就是不可变,否则就是可变
i=1
print(id(i))  # 140732167000896
i=i + 2
print(id(i))  # 140732167000960
print(i) #3

l= [1, 2]
print(id(l))  # 4300825160
l.append('Python')
print(id(l))  # 4300825160
print(l) #[1, 2, 'Python']
  1. hash
    hash(x)
    只要不报错,就是可被哈希,就是不可变类型
    数值、字符、元组都能被哈希,所以是不可变类型
    列表、集合、字典都不能被哈希,所以是可变类型
a='Name'
print(a,type(a)) # Name <class 'str'>
print(hash('Name'))  # 7047218704141848153
b=(1, 2, 'Python')
print(b,type(b)) # (1, 2, 'Python') <class 'tuple'>
print(hash(b))  # 1704535747474881831
c=[1, 2, 'Python']
print(c,type(c)) # [1, 2, 'Python'] <class 'list'>
print(hash(c)) # TypeError: unhashable type: 'list'

(2)字典的定义
字典的组成是 键:值(key:value) 用大括号[{}]表示,大括号里头用逗号[,]分开各个键,键和值用冒号[:]分开,键不可以是表
(3)字典的创建和访问

  1. 用字符串和数值
dic1={1:321,2:6789,3:'sdf809'}
print(dic1,type(dic1)) # {1: 321, 2: 6789, 3: 'sdf809'} <class 'dict'>
print(dic1[1]) #321
  1. 用元组
dic1={(1,3,5):'hsuoif','fshjk':(2,68,8),"sgf":[4,67]}
print(dic1[(1,3,5)]) #hsuoif
print(dic1[('fshjk')]) #(2, 68, 8)
print(dic1["sgf"]) #[4, 67]
  1. 通过空字典
    dict
    通过空字典dict()来创建,记住一个key只能对应一个value
dic1=dict()
dic1['asd']='das'
dic1[312]='da'
dic1[(1,4,5)]=76
print(dic1) #{'asd': 'das', 312: 'da', (1, 4, 5): 76}
  1. dict(mapping)
dic1=dict([('apple', 4139), ('peach', 4127), ('cherry', 4098)])
print(dic1)  # {'cherry': 4098, 'apple': 4139, 'peach': 4127}

dic2=dict((('apple', 4139), ('peach', 4127), ('cherry', 4098)))
print(dic2)  # {'peach': 4127, 'cherry': 4098, 'apple': 4139}
  1. dict(kwargs)
    使用这种方法时,只能用字符串,且不能使用引号
dic1=dict(lol='goodgame!',gg='goodgreat!')
print(dic1['lol']) #goodgame!
print(dic1) #{'lol': 'goodgame!', 'gg': 'goodgreat!'}

(4)字典的内置

  1. dict.fromkeys
    dict.fromkeys(seq,value)可以用于创建一个字典,seq中元素作为字典里的键,value为所有键对应的初始值
seq=(123,'453',(31,65))
dic1=dict.fromkeys(seq)
print(dic1) #{123: None, '453': None, (31, 65): None}
dic1=dict.fromkeys(seq,10)
print(dic1) #{123: 10, '453': 10, (31, 65): 10}
  1. dict.keys
    dict.keys()返回字典的键,可以用list()来转换成列表
dic={123:55,'dsa':'d8a7'}
a=dic.keys()
print(a,type(a)) #dict_keys([123, 'dsa']) <class 'dict_keys'>
b=list(a)
print(b,type(b)) #[123, 'dsa'] <class 'list'> 
  1. dict.values
    dict.values()返回字典的值,可以用list()来转换成值
dic={123:55,'dsa':'d8a7'}
a=dic.values()
print(a,type(a)) #dict_values([55, 'd8a7']) <class 'dict_values'>
b=list(a)
print(b,type(b)) #[55, 'd8a7'] <class 'list'>
  1. dict.items
    dict.items()以列表的形式返回可遍历的元组(键,值)
dic={123:55,'dsa':'d8a7'}
print(dic.items()) #dict_items([(123, 55), ('dsa', 'd8a7')])
a=tuple(dic.items())
print(a,type(a)) #((123, 55), ('dsa', 'd8a7')) <class 'tuple'>
b=list(dic.items())
print(b,type(b)) #[(123, 55), ('dsa', 'd8a7')] <class 'list'>
  1. dict.get
    dict.get(key,(default=None)返回指定键的值,如果键不存在就返回默认值(None)
dic={'da':21,213:'fd'}
print("da 值为:%d"%dic.get('da')) #da 值为:21
print("213 值为:%s"%dic.get(213)) #213 值为:fd
print("das 值为:%s"%dic.get('das')) #das 值为:None
  1. dict.setdefault
    dict.setdefault(key,(default=None)用法与get()一样,但是在键不存在的时候,会添加一个键并设定一个默认值(None)
dic={'da':21,213:'fd'}
print("da 值为:%d"%dic.setdefault('da')) #da 值为:21
print("213 值为:%s"%dic.setdefault(213)) #213 值为:fd
print("das 值为:%s"%dic.setdefault('das')) #das 值为:None
print(dic) #{'da': 21, 213: 'fd', 'das': None}
  1. key in dic
    key in dic 判断键是否在字典中,若在,返回True,不在就返回False
    key not in dic
    key not in dic与key in dic相反
dic={'da':23,34:'dg'}
print('da' in dic) #True
print('da' not in dic) #False
print('dsf' in dic) #False
print('dsf' not in dic) #True
  1. dict.pop
    dict.pop(key,fault)删除给定键的值,且返回值是被删除的值,key值必须给出,如果不存在,就必须返回fault值,fault值必须给出,不给出会报错
    del dict(key)删除给定键对应的值
dic1={321:'dfs','fsf':68,890:'das'}
print(dic1.pop(321),dic1,sep='   ') #dfs   {'fsf': 68, 890: 'das'}
print(dic1.pop(123,'hjsfk'),dic1,sep='   ') #hjsfk   {'fsf': 68, 890: 'das'}
del dic1['fsf']
print(dic1) #{890: 'das'}
  1. dict.popitem
    dict.popitem()随即返回并删除一组键和值,若字典为空却调用这个方法就会报错
dic1={321:'dfs','fsf':68,890:'das'}
print(dic1.popitem()) #(890, 'das')
print(dic1) #{321: 'dfs', 'fsf': 68}
  1. dict.clear
    dict.clear()清空字典
dic1={321:'dfs','fsf':68,890:'das'}
dic.clear()
print(dic) #{}
  1. dict.copy
    dict.copy()返回字典的浅复制
dic1={31:'fd','fsd':435}
dic2=dic1.copy()
print(dic2) #{31: 'fd', 'fsd': 435}

直接赋值和浅复制的区别

dic1={'user': 'lsgogroup', 'num': [1, 2, 3]}

# 引用对象
dic2=dic1  
# 浅拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
#就是第一个直接复制过来不再改变,后边的复制后跟着原来的改变
dic3=dic1.copy()  

print(id(dic1))  # 148635574728
print(id(dic2))  # 148635574728
print(id(dic3))  # 148635574344

# 修改 data 数据
dic1['user']='root'
dic1['num'].remove(1)

# 输出结果
print(dic1)  # {'user': 'root', 'num': [2, 3]}
print(dic2)  # {'user': 'root', 'num': [2, 3]}
print(dic3)  # {'user': 'lsgogroup', 'num': [2, 3]}
  1. dict.update
    dic1.update(dic2)把字典dic2中的键值更新到dic1中去
dic1={313:'das','jhkugs':6456}
dic2={(3,65,'fd'):'ad',313:'das'}
dic1.update(dic2)
print(dic1) #{313: 'das', 'jhkugs': 6456, (3, 65, 'fd'): 'ad'}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值