Python Day 5
版本区分:
字典在python3.5包含3.5之前都是无序,但是3.6之后是有序的。
可迭代:
可以被for循环依次取到数值
数据类型的分类
可变(不可哈希hash):list,dict,set list = [111,222,333] (内容可变,hash不固定)
不可变(可哈希hash):str,turple,int,bool name = 'alex' (内容不可变,hash值是固定值)
容器类:
容器类的数据类型: list,tuple,dict l1 = [l1,True,'alex']
非容器类的数据类型:str,int,bool s1 = '[11,22,33]'
字典
基础数据类型之一,{} 以键值对的形式存储数据。
以{key:value} 形式,(映射)存储的大量的关系型数据,二分法查询数据,查询速度非常快。
key 键 : 唯一 必须是不可变的可哈希的数据类型。
value 值 :可以是任意数据类型。
查: 三种方法
字典的键通过hash表转换成数字,采用二分查找查询数字。
1、key查询方法(直接查询) dic['key'] 注意:此方法查询key不存在时,会直接报错
dic = {'name':'ck','age':18}print(dic['name'])
2、get查询 dic.get('key') ,查询key不存在时默认返回None,可以自定义失败返回内容 (推荐使用)
dic = {'name':'ck','age':18}print(dic.get('name'))=============dic= {'name':'ck','age':18}print(dic.get('name1','key不存在'))
3、for循环查询。直接循环遍历dic 效果等同于 dic.keys(), dic.values(), dic.items() 类似于list但不是list的类型。 list(查询到的结果)可以转列表 可以遍历 没有索引
for key indic.keys():print(key)for value indic.values():print(value)for k,v in dic.items(): #[('name', '老男孩'), ('age', 56), ('hobby', 'women')]
print(k,v)
分别赋值概念
a, b= 1, 2a, b= ('alex', '34')
a, b= ['alex', '34']
有 如下 a= 1 b = 3,用一行代码将a b值互换。
a= 1b= 3a, b= b, a
增:两种方法
1、直接赋值 dic['socre'] = 100 ,(已存在key时,会覆盖值内容。同修改方法)
dic = {'name':'ck','age':18}
dic['socre'] = 100
print(dic)
2、dic.setdefault()
dic = {'name':'ck','age':18}
dic.setdefault('sex') #可以只添加值
dic.setdefault('sex','man') #添加key:value ,当key存在时,不论value是否存在,不进行任何操作
print(dic)
改:两种方法
1、赋值操作。 dic['name'] = cktest (当key存在时,赋值会覆盖原value,同增加方法。)
dic = {'name':'ck','age':18}
dic['name'] = 'cktest'
print(dic)
2、update。前提需要两个字典。 对照字典中所有键值对 覆盖添加目标字典中,对照字典不变。
dic = {'name':'ck','age':18}
dic2= {'sex':'man','age':'19'}
dic.update(dic2)#对dic字典与dic2进行比较更新,将dic2中的添加到dic中,将共有的key对应的value更新为dic2内容。dic2不变,只作为供应。
print(dic)
删:四种方法
1、pop 有返回值 返回值为删除的值。
dic = {'name':'ck','age':18}print(dic.pop('name'))print(dic)============ck
{'age': 18}
2、popitem dic.popitem() 随机删除(由于字典在python3.5包含3.5之前都是无序,但是3.6之后是有序的。使用3.6版本删除会删除最后的) 有返回值,返回值为元组,里面是删除的键值对。
dic = {'name':'ck','age':18}print(dic.popitem())print(dic)=============('age', 18)
{'name': 'ck'}
3、clear dic.clear() 清空字典。
dic = {'name':'ck','age':18}
dic.clear()print(dic)
结果:
{}
4、del
1.内存删除(删除整个字典)
dic = {'name':'ck','age':18}del dic
2.按照键,删除键值对 没有会报错
dic = {'name':'ck','age':18}del dic['name']print(dic)
fromkeys() 快速创建字典,以第一位作为键,第二位作为值,可迭代创建
a = fromkeys('abc','a')
字典嵌套
同列表嵌套相似,都是通过索引找到对应的值,对值进行操作。
dic ={'name_list': ['碗蓉', '俊俊', '爽妹'],'status': None,'personal_msg': {'name': '反面教材','age': 25,'hobby_list':['抽烟', '喝酒', '烫头'],
}
}#1,给dic添加一个键值对,学校:老男孩
dic["学校"] = "老男孩"
#2,将status对应的值改成True
dic['status'] =True#3,给name_list对应的列表追加一个元素:平平
dic['name_list'].append('平平')#4,给personal_msg对应的字典添加一个键值对sex:男
dic['personal_msg']['sex'] = '男'
#5,将hobby_list 对应的列表中的烫头改成唱歌。
dic['personal_msg']['hobby_list'][-1] = '唱歌'
print(dic)