一、字典
字典是列表以为Python中使用最灵活的内置数据类型
是一种可变的数据类型
和列表的区别:
- 列表有序,字典无序
- 列表通过索引(偏移)访问元素,字典通过键(key)访问元素
1.1 基本格式
dic = {key1:value1,key2:value2,...,keyn:valuen}
值可以去任意数据类型,但键不可以,必须为不可变数据类型,即key必须可哈希。
如:
info = {"id":20190101,"name":"Tom","age":18}
- 特点
- key:value,键值对之间用冒号连接
- key:value组成字典的一个元素
- 键值对之间用逗号隔开
- 整个字典用花括号包裹
1.2 字典的创建
- 空字典
dic = {}
- 多元素字典
info = {"id":20190101,"name":"Tom","age":18}
- 强制转化
dic = dict(id = 20190101,name = "Tom",age = 18)
zip( )函数
key = ("id","name","age") value = (20190101,"Tom",18) test = list(zip(key,value)) print(test) #[('id', 20190101), ('name', 'Tom'), ('age', 18)] test2 = dict(test) print(test2) #{'id': 20190101, 'name': 'Tom', 'age': 18} test3 = dict(zip(key,value)) print(test3) #{'id': 20190101, 'name': 'Tom', 'age': 18}
- 通过字典的fromkeys方法创建字典
格式
dict.fromkeys(seq,val=None)
- 创建并返回一个字典
- 以seq中的元素作为该字典的键
- val的值作为该字典中所有键对应的初始值;若不提供,默认为None
dic = dict.fromkeys(["Tom","Jack","Lucy"],666666)
print(dic) #{'Tom': 666666, 'Jack': 666666, 'Lucy': 666666}
1.3 字典的常见操作
1.3.1 增
- 直接添加键值对(dic[key] =value),不存在加入键值对,存在则修改值
dic = {}
dic["id"] = 20190101
print(dic) #{'id': 20190101}
dic["id"] = 20190102
print(dic) #{'id': 20190102}
- dict.update(dic):把字典dic中的键值对更新到dict中,不存在加入键值对,存在则修改值
dic = {"job":"IT","hobby":"Read","name":"Jack"}
dict = {"id":20190101,"name":"Tom","age":22}
dict.update(dic)
print(dict)
1.3.2 删
- dict.pop(key,[default]):有key,删除并返回;不存在,给出默认值则返回默认值,不给默认值会报错
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.pop("age")) #22
print(dict) #{'id': 20190101, 'name': 'Tom'}
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.pop("job",1)) #1
print(dict) #{'id': 20190101, 'name': 'Tom', 'age': 22}
- dict.popitem( ):随机删除一对键值对(实际上是能看到的最后一对),有返回值,元组
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.popitem()) #('age', 22)
print(dict) #{'id': 20190101, 'name': 'Tom'}
key,value = dict.popitem()
print(key,value) #name Tom
- del dict[key]:删除指定的键对应的键值对,不给键则删除字典
- dict.clear( ):清空字典
1.3.3 改
- 直接修改
dict = {"id":20190101,"name":"Tom","age":22}
dict["id"] = 20190201
print(dict) #{'id': 20190201, 'name': 'Tom', 'age': 22}
- dict.setdefault( ):键存在,不改动,返回字典中的值;不存在,在字典中添加相应的键值对,并返回值
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.setdefault("name","Jack")) #Tom
print(dict) #{'id': 20190101, 'name': 'Tom', 'age': 22}
print(dict.setdefault("job","IT")) #IT
print(dict) #{'id': 20190101, 'name': 'Tom', 'age': 22, 'job': 'IT'}
1.3.4 查
字典值得访问
- 通过键访问值(不存在会报错)
dict = {"id":20190101,"name":"Tom","age":22}
print(dict["id"]) #20190101
- dict.get( )访问值
- 语法格式 dict.get(key[,default])
- 不确定字典中是否存在某个键而又想对其进行操作
- 当key不存在的时候,不会抛出异常,返回None
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.get("id")) #20190101
print(dict.get("job")) #None
遍历
- dict.keys( )
- dict.value( )
- dict.items( )
dict = {"id": 20190101, "name": "Tom", "age": 22}
for key in dict.keys():
print(key, end=",") #id,name,age,
for value in dict.values():
print(value, end=",") #20190101,Tom,22,
for items in dict.items():
print(items,end=",") #('id', 20190101),('name', 'Tom'),('age', 22),
for key, value in dict.items():
print(key, value, end=",") #id 20190101,name Tom,age 22,
二、练习:
- 收录不定量信息,以 [{‘id’: 20190101, ‘name’: ‘Tom’, ‘age’: 19}, {‘id’: 20190102, ‘name’: ‘Jack’, ‘age’: 18}…] 的格式输出
li = []
while True:
dic = {}
id = input("请输入id(输入q退出):")
if id == 'q':
break
name = input("请输入name:")
age = input("请输入age:")
dic["id"] = int(id)
dic["name"] = name
dic["age"] = int(age)
li.append(dic)
print(li)
- 现有列表li = [23, 34, 45, 22, 67, 89, 90, 99, 66, 45],将列表内的元素按大于等于或小于分成两组,以 {">=60":[ ],"<60":[ ]}的格式输出
dic = {">=60":[],"<60":[]}
li = [23, 34, 45, 22, 67, 89, 90, 99, 66, 45]
for i in li:
if i >= 60:
dic[">=60"].append(i)
else:
dic["<60"].append(i)
print(dic)