字典
- 列表以外Python中使用最灵活的内置数据类型。
- 是一种可变的数据类型。
- 和列表的区别:
- 列表有序,字典无序
- 列表通过索引(偏移)访问元素,字典通过键(key)访问元素
字典的基本格式:
dic = {key1:value1,key2:value2,...,keyn:valuen}
值可以取任意数据类型,但键不可以,必须为不可变类型,即key必须可哈希。
可哈希—>不可变
哈希—>可变
特点:
- key:value ,键值对之间用冒号(:)连接
- key:value组成字典的一个元素
- 键值对之间用逗号(,)隔开
- 整个字典用花括号{}包裹
字典的创建
- 空字典的创建
dic = {}
print(type(dic))
# <class 'dict'>
- 创建多元字典
info = {"id":2019011,"name":"Tom","age":18}
print(info)
print(len(info))
print(info["id"])
# {'id': 2019011, 'name': 'Tom', 'age': 18}
# 3
# 2019011
key1,key2,key3 = "id","name", "age"
value1,value2,value3 = 20190101,"Tom",18
dic = {key1:value1,key2:value2,key3:value3}
print(dic)
# {'id': 20190101, 'name': 'Tom', 'age': 18}
- 强转
dic = dict(id=20190101,name="Tom",age=18)
print(dic)
# {'id': 20190101, 'name': 'Tom', 'age': 18}
zip()
key = ("id","name","age")
value = (20190101,"Tom",18)
tp = list(zip(key,value))
print(tp,type(tp))
# [('id', 20190101), ('name', 'Tom'), ('age', 18)] <class 'list'>
print(dict((('id',20190101),('name','Tom'),('age',18))))
#{'id': 20190101, 'name': 'Tom', 'age': 18}
- 通过字典的fromkeys方法创建字典
格式:
dict.fromkeys(seq,val=None)
- 创建并返回一个字典
- 以seq中的元素作为该字典的键
- val的值作为该字典中所有键对应的初始值;如不提供,默认为None。
dic = dict.fromkeys(["Tom","jack","lucy"],66666)
print(dic)
# {'Tom': 66666, 'jack': 66666, 'lucy': 66666}
字典的常见操作
(1)增
- 直接添加键值对(dic[key] = value)
- 直接使用变量名[“键”] = “值”。
- 如果key不存在,新建键值对(key:value)
- 如果存在,则更新值(value)
dic = {}
dic["id"] = 20190101
dic["name"] = "Ton"
dic["age"] = 19
print(dic)
# {'id': 20190101, 'name': 'Ton', 'age': 19}
li = []
tp = input("是否添加一个字典:")
while tp == "是" :
dic = {}
id = int(input("id = "))
name = input(" name =")
age = int(input("age ="))
dic["id"] = id
dic["name"] = name
dic["age"] = age
li.append(dic)
tp = input("是否添加一个字典:")
print("新添加的字典为:",dic)
else :
print("总字典为:",li)
是否添加一个字典:是
# id = 1001
# name =pluto
# age =18
# 是否添加一个字典:是
# 新添加的字典为: {'id': 1001, 'name': 'pluto', 'age': 18}
# id = 1002
# name =charon
# age =19
# 是否添加一个字典:是
# 新添加的字典为: {'id': 1002, 'name': 'charon', 'age': 19}
# id = 1003
# name =love
# age =999
# 是否添加一个字典:否
# 新添加的字典为: {'id': 1003, 'name': 'love', 'age': 999}
# 总字典为: [{'id': 1001, 'name': 'pluto', 'age': 18}, {'id': 1002, 'name': 'charon', 'age': 19}, {'id': 1003, 'name': 'love', 'age': 999}]
-
dict.update(dic)
把字典dic中的键值对(key:value)更新到dict中。
- 两个字典的键完全不同,则将dic的键值对全部添加至dictc中
- 存在相同的键,则更新dict中对应的值
dic = {"job":"IT","hobby":"Read"}
dic2 = {"name":"jack","hobby":"read"}
dict = {"id":20190101,"name":"Tom","age":22}
dict.update(dic2)
print(dict)
# {'id': 20190101, 'name': 'jack', 'age': 22, 'hobby': 'read'}
(2)删
- dict.pop
- 格式:dict.pop(key[,default])
- 如果key存在于dict中,删除并返回dict[key]
- 如果不存在,给出默认值则返回默认值,未给出默认值,报错
- 格式:dict.pop(key[,default])
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.pop("job","IT"))
print(dict)
print(dict.pop("age",23))
print(dict)
# IT
# {'id': 20190101, 'name': 'Tom', 'age': 22}
# 22
# {'id': 20190101, 'name': 'Tom'}
- dict.popitem()
- 随即删除一对键值对
- 有返回值的,元组
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.popitem())
key,value = dict.popitem()
print(dict)
print(key,value)
# ('age', 22)
# {'id': 20190101}
# name Tom
- del.dict[key],删除指定元素
- del.dict, 删除字典
dict = {"id":20190101,"name":"Tom","age":22}
del dict["age"]
print(dict)
# {'id': 20190101, 'name': 'Tom'}
- clear(),清空元素
dict = {"id":20190101,"name":"Tom","age":22}
print(dict.clear())
print(dict)
# None
# {}
(3)改
- 直接修改
dic = {"id":20190101,"name":"Tom","age":22}
dic["id"] = 20190210
print(dic)
# {'id': 20190210, 'name': 'Tom', 'age': 22}
- dict.setdefault()
- 键存在,不改动,返回字典中的值
- 不存在,在字典中添加相应的键值对,并返回对应的值
dic = {"id":20190101,"name":"Tom","age":22}
print(dic.setdefault("name","Jack")) # 键存在,以原字典为主,不添加
print(dic.setdefault("Job","IT")) # 键不存在,添加
print(dic)
# Tom
# IT
# {'id': 20190101, 'name': 'Tom', 'age': 22, 'Job': 'IT'}
(4)查
字典值的访问
- 直接通过字典的key访问value
dic = {"id":20190101,"name":"Tom","age":22}
print(dic["id"]) # 存在,返回对应的值
print(dic["Job"]) #不存在,直接报错
- dict.get()访问value
- 语法格式
dict.get(key[,default])
- 不确定字典中是否存在某个键而又想对其进行操作,比如获取值—>get 方法
- 当key不存在的时候,不会抛出异常,返回None
- 语法格式
dic = {"id":20190101,"name":"Tom","age":22}
print(dic.get("id",20190201))
print(dic.get("salary",12000)) # 不存在,返回输入值
print(dic.get("Job")) # 不存在,返回None
print(dic)
# 20190101
# 12000
# None
# {'id': 20190101, 'name': 'Tom', 'age': 22}
- 遍历
- dict.keys(),返回键
- dict.values(),返回值
- dict.items(),返回键值对
dic = {"id":20190101,"name":"Tom","age":22}
print(dic.keys(),type(dic.keys()))
print(dic.values(),type(dic.values()))
print(dic.items(),type(dic.items()))
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)
# dict_keys(['id', 'name', 'age']) <class 'dict_keys'>
# dict_values([20190101, 'Tom', 22]) <class 'dict_values'>
# dict_items([('id', 20190101), ('name', 'Tom'), ('age', 22)]) <class 'dict_items'>
# id name age 20190101 Tom 22 ('id', 20190101) ('name', 'Tom') ('age', 22) id : 20190101
# name : Tom
# age : 22
li = [23,34,45,56,22,67,78,89,90,99,66,45]
dic = {}
li1 = []
li2 = []
for i in range(len(li)):
if li[i] < 60 :
li1.append(li[i])
else:
li2.append(li[i])
dic[">=60"] = li2
dic["<=60"] = li1
print(dic)
# {'>=60': [67, 78, 89, 90, 99, 66], '<=60': [23, 34, 45, 56, 22, 45]}
集合
特点:
-
无序
-
不可重复
-
不可更改
- 内部元素是可哈希的
- 集合本身是不可哈希的
-
用{}括起来的单元素数据集
用途
- 去重(列表—>集合,自动去重)
- 关系测试
集合的创建
空集合的创建
>>> st = set()
>>> type(st)
<class 'set'>
多元的集合创建
>>> st = {1,2,3,"abc","def"}
>>> type(st)
<class 'set'>
>>> st = {1,2,3,"abc","def",["a","b"]}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>>
强转
>>> li = ["city","college","zhejiang"]
>>> st = set(li)
>>> st,type(st)
({'college', 'city', 'zhejiang'}, <class 'set'>)
>>>
>>> sr = "city"
>>> st = set(sr)
>>> st
{'t', 'y', 'i', 'c'}
>>>
>>> sr = "hello"
>>> st = set(sr)
>>> st
{'e', 'o', 'l', 'h'}
>>>
>>> dic = {"id":20190101,"name":"Tom","age":18}
>>> st = set(dic)
>>> st
{'id', 'name', 'age'}
>>> li = list(dic)
>>> li
['id', 'name', 'age']
>>>
集合的基本操作
(1)增
- set.add()
- set.update()
(2)删
- set.pop(),删除排序最小的一个元素
- set.discard(),移除元素,不存在,不会报错
- set.remove(),移除元素,不存在,报错
- del set
>>> st = {"a","b","ab","c"}
>>> st.pop()
'ab'
>>> st = {"a","b","ab","c",1}
>>> st.pop()
1
>>> st.discard("ab")
>>> st
{'b', 'a', 'c'}
>>> st = {"a","b","ab","c"}
>>> st.discard("d")
>>> st
{'ab', 'b', 'c', 'a'}
>>>
>>> st.remove("d")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'd'
>>>
>>> del st
>>> st
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'st' is not defined
>>>
(3)改
- 不可更改
(4)查
- 不可查的
(5)遍历
st = {"city","college","zhejiang"}
for i in st :
print(i,end=" ")
# college zhejiang city
st = {"city","college","zhejiang"}
for i in enumerate(st):
print(i)
# (0, 'zhejiang')
# (1, 'college')
# (2, 'city')
集合的基本运算
(1)子集
- <
- set.issubset()
>>> a = set("abcd")
>>> b = set("cdef")
>>> c = set("ab")
>>> a,b,c
({'d', 'b', 'c', 'a'}, {'f', 'e', 'd', 'c'}, {'b', 'a'})
>>>
>>> c<a
True
>>> c.issubset(a)
True
>>> c<b
False
(2)交集
- “&”
- set.intersection()
>>> a = set("abcd")
>>> b = set("cdef")
>>> c = set("ab")
>>> a & b
{'d', 'c'}
>>> a.intersection(b)
{'d', 'c'}
(3)并集
- “|”
- set.union()
>>> a = set("abcd")
>>> b = set("cdef")
>>> a | b
{'b', 'a', 'd', 'f', 'e', 'c'}
>>> a.union(b)
{'b', 'a', 'd', 'f', 'e', 'c'}
(4)差集
- “-”
- set.difference()
>>> a = set("abcd")
>>> b = set("cdef")
>>> a - b
{'b', 'a'}
>>> a.difference(b)
{'b', 'a'}
>>>