7.字典

数据类型的分类(可变与不可变):

  • 可变(不可哈希)的数据类型:list dict set
  • 不可变(可哈希)的数据类型: str bool int tuple

字典:{}括起来,以健值对形式存储的容器型数据类型:

dic = {"key":1,1:123,False:True,(1,2,3):"abc",1:[1,3,4]}
print(dic)
  • 键必须是不可变的数据类型,int str(bool tuple几乎不用)唯一的
  • 值可以是任意数据类型,对象
  • 字典是无序的,python3,6按照初次建立字典的顺序排列,学术上不认为是有序的,
  • 字典3,7x以后都是有序的
  • 字典是可变的,增加,删除,修改,查看 其他操作
  • 字典的优点:查询速度非常快,存储关联性的数据
  • 字典的缺点:以空间换时间
1.字典的三种创建方式
面试会考:
方式一:
dic = dict((('one', 1), ('two', 2), ('three', 3)))
print(dic)  # {'one': 1, 'two': 2, 'three': 3}

方式二:
dic = dict(one=1, two=2, three=3)
print(dic)

方式三:
dic = dict({'one': 1, 'two': 2, 'three': 3})
print(dic)
  • 验证字典的合法性
dic = {[1,2,3]: 'alex', 1: 666}  # 键要不可变的数据类型
print(dic)
dic = {1: 'alex', 1: '小刚', 2: 'wusir'}  # 键要唯一
print(dic)
2.字典的增删改查

增:

dic = {"a":"b","b":"c"}
直接增加 有则改之 无则增加
dic[键]=值
dic['c']=c 增加
dic['a']=1 改
setdefault 有则不变 无则增加
dic.setdefault("c","aaa") 
print(dic)

删:

pop 按照键删除键值对,有返回值,返回的是删除的值***
设置第二个参数则无论字典中有无此键都不会报错
dic.pop('b')
ret=dic.pop('b')
ret=dic.pop('hobby','没有此键')
print(ret)
print(dic)
del dic # 删除整个字典
del dic['b'] #删除指定的键值对
clear 清空
dic.clear() 清空
print(dic)删除整个字典中的键值对

改:

 dic1 = {"a":"b","C":"c"}
 dic1['b']='值' 键在字典中存在就是修改,键在字典中不存在就是增加
 dic2 = {1:2,"a":"a1"}
 dic2.update(dic1)   # update括号里的字典级别高,括号中添加的是字典
 print(dic2)

查:

字典的查询只能通过键获取值,不能通过值获取键

dic = {1:2,"a":"a1"}
print(dic["c"])  # 如果有键在字典中存在就放回键对应的值,如果不存在就报错
print(dic.setdefault(1))>>>返回的是字典的值
print(dic.setdefault(2))>>>键不存在,返回的是None
get  -- 获取***
dic.get('c')#键不存在返回的是None
dic.get('d','没有此键') 可以设置返回值,获取值的时候可以指定返回的内容,键不存在的时候不报错
dic={'a':1}
dic['a'] +=1
dic.get('a')
print(dic)
dic = {1:2,"a":"a1"}
for i in dic:#for循环字典的时候打印的是字典的键
    print(j,dic[i])

例1:

dic = {"1":1,"2":2,"3":3,"4":4}
# 删除"2"  2种方式
dic.pop("2")
del dic["2"]
# 添加 "5":5 2种方式

dic.setdefault("5",5)
dic["5"] = 5
# 修改: "1":10086
dic["1"] = 10086

# 查看"3"的值
dic.get("3",'没有值')
dic["3"]  # 没有就会报错
dic = {"1":1,"2":2,"3":3,"4":4}
3.keys() values() items()

print(dic.keys(),type(dic.keys()))

可以转化成列表

print(list(dic.keys()))

li = []
for key in dic:
    li.append(key)
print(li)

for i in dic.keys():#高仿列表
    print(i)

print(type(dic.keys()))   可以for循环,但是不能索引
dic_li = dic.keys()
print(dic_li)

dic = {"1":1,"2":2,"3":3,"4":4}
print(dic.keys())>>>返回值#dict_keys(['1', '2', '3', '4'])
print(dic.values())>>>返回值#dict_values([1, 2, 3, 4])
print(dic.items())>>>返回值
#dict_items([('1', 1), ('2', 2), ('3', 3), ('4', 4)])

for i in dic.items():
    print(i)
#循环打印每一个元祖
('1', 1)
('2', 2)
('3', 3)
('4', 4)
4.解构
a = 1
b = 2
print("is a",id(a))
print("is b",id(b))
a,b = b,a #改变的是内存地址的指向
print("is a",id(a))
print("is b",id(b))
1560157067771
a,_,c = "你好啊"
print(a,c) >>>你 啊
a,b分别赋值
a,b=('1','2')
print(a,b)
a,b=['4','5']
print(a,b)
a,b={"a":1,"b":2,}#得到的是字典的键
print(a,b)
dic = {"1":1,"2":2,"3":3,"4":4}
for key,value in dic.items():
    print(key,value)
keys,values,items,解构
dic={"1":1,"2":2,"3":3,"4":4}
for  i in dic: #效率高
    print(i,dic[i])
for k,v in dic.items():
    print(k,v)
5.字典的循环取值
dic = {"电脑":15000,"手机":8000,"耳机":4000,"手表":1111}
1 电脑
2 手机
3 耳机
4 手表

for i in range(len(dic)):
    print(i+1)

count = 1
for i in dic:
    print(count,i)
    count += 1

li = [1,2,3,4,54]
for i,k in enumerate(li):  # enumerate 第二个参数默认不写就是0    -- 枚举
    print(i,k)

posted @ 2019-06-10 19:15  God_with_us  阅读(140)  评论(0编辑  收藏  举报