字典
- 字典是列表以外Python中使用最灵活的内置数据类型
- 可变
- 和列表的区别:
- 列表有序,字典无序
- 列表通过索引(偏移)访问元素,字典通过键(key)访问元素
格式:
值(value)可以取任意数据类型,但键(key)必须是不可变数据类型
dic = {key:value,key:value}
即key必须可哈希,即不可改变的数据结构(字符串str、元组tuple、对象集objects)
特点
- 1.key:value ,键值对之间用冒号链接
- 2.key:value 组成字典的一个元素
- 3.键值对之间用逗号隔开
- 4.整个字典用花括号{}包裹
字典的创建
空字典
dic = {}
print(type(dic))
多元素字典
info = {"id":20190101,"name":"Tom","age":18}
print(info)
强转
当字典强制转为别的数据类型时,只会留下key值
dic = dict(id=20190101,name="tom",age=18)
print(dic)
zip()
key = ("id","name","age")
value = (20190909,"tom",18)
tp = tuple(zip((key,value)))
print(tp,type(tp))
print(dict((('id',20190101),('name',"tom"))))
通过字典的fromkeys方法创建字典
格式:
dict.fromkeys(seq,val=None)
-
创建并返回一个字典
-
以seq中的值作为键
-
val的值作为该字典中所有键的初始对应值;如不提供,默认为None
-
dic = dict.fromkeys("hello")
print(dic)
# {'h': None, 'e': None, 'l': None, 'o': None}
dic = dict.fromkeys(["tom","jack","acde"],6666)
print(dic)
# {'tom': 6666, 'jack': 6666, 'acde': 6666}
字典的常见操作
增
1)直接添加键值对
- 通过使用变量名[“键”]=“值”,
- 如果key不存在,新建键值对
- 如果存在,则更新值(value)
dic = {}
dic["id"]= 2019
dic["name"]="AA"
print(dic)
li = []
while True:
dic = {}
id = input("请输入ID:\t")
name = input("请输入name:\t")
age = ("请输入age:\t")
dic["id"] = id
dic["name"] = name
dic["age"] = age
li.append(dic)
flag = input("Continue?(Y/N")
if flag.lower() == "n":
break
#print(dic)
print(li)
-
dict.update(dic)
把字典dic中的键值对更新到dict中
-
两个字典的键完全不同,则将dic的键值对全部添加至dict
-
存在相同的键,则更新dict中的对应值
-
删
-
dict.pop
-
格式:dict.pop(key[,default])
-
格式:dict.pop(key[,default])
-
如果不存在,给出默认值则返回默认值,未给出默认值,报错
如果key存在于dict种,删除并返回dict[key]
如果不存在,给出默认值则返回默认值,未给出默认值,报错
-
-
print(dict)dict = {'id':20190101,'name':"tom",'age':19}
print(dict.pop("job","it"))
print(dict)
- dict.popitem()
- 随机删除一对key:value(一般删除末尾对)
- 返回值为被删除的key:value的元组
dict = {'id':20190101,'name':"tom",'age':19}
#print(dict.popitem())
key, value = dict.popitem()
print(dict)
print(key, value)
- del
- 删除指定的键值对,如果不指定则删除整个字典
dict = {'id':20190101,'name':"tom",'age':19}
del dict["age"]
print(dict)
- dict.clear()
- 清空字典
dict = {'id':20190101,'name':"tom",'age':19}
print(dict.clear())
print(dict)
- update
dic =
dic2 =
dict =
dict.update(dic2)
改
- 直接修改
dic = {'id':20190101,'name':"tom",'age':19}
dic["id"] = 20190202
print(dic)
- dict.setdefault()
- 键存在,不改动,返回字典中的值
- 键不存在,在字典中添加相应的键值对,并返回对应的值
dic = {'id':20190101,'name':"tom",'age':19}
print(dic.setdefault("name","tom"))
print(dic.setdefault("salary",1000))
print(dic)
查
- 字典值的访问
- 直接通过字典的key访问value
- 如果key不存在则报错
dic = {'id':20190101,'name':"tom",'age':19}
print(dic["id"])
print(dic["job"])
- dict.get()访问value
- 语法格式 dict.get(key[,default])
- 不确定字典中是否存在某个键而又想对其进行操作,比如获取值 -->get方法
- 当key不存在的时候,不会抛出异常,返回None
dic = {'id':20190101,'name':"tom",'age':19}
print(dic.get("id",20190201))
print(dic.get("salary"))
遍历
- dict.keys()
- 返回所有key值
- dict.values()
- 返回所有value
- dict.items()
- 返回所有键值对
dic = {'id':20190101,'name':"tom",'age':19}
print(dic.get("id",20190201))
print(dic.keys(),type(dic.keys()))
for key in dic.keys():
print(key,end=" ")
for value in dic.values():
print(value,end=" ")
for item in dic.items():
print(item,end="")
for key,value in dic.items():
print(key,":",value)
习题
li = [23,34,45,22,67,89,90,99,66,45]
返回
{">=60":[],"<60":[]}
li = [23,34,45,22,67,89,90,99,66,45]
li1 = []
li2 = []
for i in li:
if i >= 60 :
li1.append(i)
else:
li2.append(i)
dic = {">=60":li1,"<=60":li2}