文章目录
python中的字典与集合
字典(dic())
key : value —>键值对
字典是列表以外Python中使用最灵活的内置数据类型。
字典是一种可变的数据类型。
和列表的区别:
- 列表有序,字典无序
- 列表通过索引(偏移)访问元素,字典通过键(key)访问元素
字典的基本格式:
dic = {key1: value1,key2: value2,...,keyn: valuen}
值可以取任意数据类型,但键不可以,必须为不可变数据类型,即key必须可哈希。
可哈希—>不可变
不可哈希—>可变
特点:
- key : value,键值之间用冒号( : )连接
- key : value 组成字典的一个元素
- 键值对之间用逗号( , )隔开
- 整个字典用花括号( { } )包裹
字典的创建
空字典
dic = {}
创建多元素字典
info = {'id': '20190101', 'name:': 'Tom', 'age': '18'}
print(info['id'])
#输出结果:20190101
注意:字典是无序的,只能通过key来搜寻
info = {'id': '20190101', 'name:': 'Tom', 'age': '18'}
print(info)
dic = dict(id=20190101, name='Tom', age=18)
print(dic)
key1, key2, key3 = 'id', 'name', 'age'
value1, value2, value3 = 20190101, 'Tom', 18
dic = {key1: value1, key2: value2, key3: value3}
print(dic)
print(dict((('id', 20190101), ('name', 'Tom'), ('age', 18))))
#输出结果都为:{'id': 20190101, 'name': 'Tom', 'age': 18}
强转:
zip()
key = ('id', 'name', 'age')
value = (20190101, 'Tom', 18)
tp = tuple(zip(key, value))
print(tp, type(tp))
#输出结果:(('id', 20190101), ('name', 'Tom'), ('age', 18)) <class 'tuple'>
通过字典的fromkeys方法创建字典
格式:
dict.fromkeys(seq,val = None)
- 创建并返回一个字典
- 以seq中的元素作为该字典的键
- val的值作为该字典中所有键对应的初始值;如不提供,默认为None。
dic = dict.fromkeys(['Tom', 'Jack','Lucy'],666)
print(dic)
#输出结果:{'Tom': 666, 'Jack': 666, 'Lucy': 666}
fromkeys只期待两个元素,所以姓名那些用列表表示,所有人的密码都为666
字典的常见操作
增
-
直接添加键值对(dic[key] = value)
- 通过使用变量名[“键”] = “值”,
- 如果key不存在,新建键值对(key : value)
- 如果存在,则更新值(value)
li = [] while 1: dic = {} id = int(input('请输入id:')) name = input('请输入name:') age = int(input('请输入age:')) dic['id'] = id dic['name'] = name dic['age'] = age li.append(dic) i = input("请问是否继续y/n(不区分大小写):") if i.lower() == 'n': break print(li) ''' 输出结果: 请输入id:20190101 请输入name:Tom 请输入age:19 请问是否继续y/n:y 请输入id:20190102 请输入name:Kate 请输入age:18 请问是否继续y/n:n [{'id': 20190101, 'name': 'Tom', 'age': 19}, {'id': 20190102, 'name': 'Kate', 'age': 18}] '''
- 通过使用变量名[“键”] = “值”,
-
dict.update(dic)
把字典dic中的键值对(key : value)更新到dict中。
- 两个字典的键完全不同,则将dic的键值对全部添加至dict中
- 存在相同的键,则更新dict中对应的值
dic = {'job': 'IT', 'hobby': 'Read'} dic2 = {'name': 'Jake', 'hobby': 'Game'} dict = {'id': 20190101, 'name': 'Tom', 'age': 20} dict2 = {'id': 20190101, 'name': 'Tom', 'age': 20} dict.update(dic) dict2.update(dic2) print(dict) print(dict2) #输出结果: #{'id': 20190101, 'name': 'Tom', 'age': 20, 'job': 'IT', 'hobby': 'Read'} #{'id': 20190101, 'name': 'Jake', 'age': 20, 'hobby': 'Game'}
删
-
dict.pop()
-
格式:
dict.pop(key[.default])
- 如果key存在于dict中,删除并返回dict[key]
- 如果不存在,给出默认值则返回默认值,来给出默认值,报错
dict = {'id': 20190101, 'name': 'Tom', 'age': 20} print(dict.pop('job', 'it')) print(dict.pop('age', 23)) print(dict) #it #20 #{'id': 20190101, 'name': 'Tom'}
-
-
dict.popitem()
-
随机删除一对键值对
-
有返回值,元组
dict = {'id': 20190101, 'name': 'Tom', 'age': 20} print(dict.popitem()) key, value = dict.popitem() print(dict) print(key, value) #('age', 20) #{'id': 20190101} #name Tom
-
-
del dict(key) ;del dict() ; dict.clear()
dict = {'id': 20190101, 'name': 'Tom', 'age': 20} del dict['age'] print(dict) del dict print(dict) dict1 = {'id': 20190101, 'name': 'Tom', 'age': 20} print(dict1.clear()) print(dict1) #{'id': 20190101, 'name': 'Tom'} #<class 'dict'> #None #{}
改
-
直接改
dic = {'id': 20190101, 'name': 'Tom', 'age': 20} dic['id'] = 20190102 print(dic) #{'id': 20190102, 'name': 'Tom', 'age': 20}
-
dict.setdefault()
- 键存在,不改动,返回字典中的值
- 不存在,在字典中添加相应的键值对,并返回相应的值
dic = {'id': 20190101, 'name': 'Tom', 'age': 20} print(dic.setdefault('name', 'Jack')) # 键存在 print(dic.setdefault('job', 'IT')) # 键不存在 print(dic) #Tom #IT #{'id': 20190101, 'name': 'Tom', 'age': 20, 'job': 'IT'}
查
-
字典值的访问
- 直接通过字典的key访问value
dic = {'id': 20190101, 'name': 'Tom', 'age': 20} print(dic['id']) print(dic['job']) #20190101(存在返回对应的值) #报错(如果访问不存在的值会报错)
-
dict.get()访问value
- 语法格式:dict.get(key[, defualt])
- 不确定字典中是否存在某一个键而邮箱对其进行操作,比如获取值—>get方法
- 当key不存在的时候,不会抛出异常,返回None
dic = {'id': 20190101, 'name': 'Tom', 'age': 20} print(dic.get('id',20190102)) print(dic.get('job')) print('salary', 1200) print(dic) #20190101 #None #salary 1200 #{'id': 20190101, 'name': 'Tom', 'age': 20}
-
遍历
- dict.keys()
- dict.values()
- dict.items()
dic = {'id': 20190101, 'name': 'Tom', 'age': 20} print(dic.keys(), type(dic.keys())) #dict_keys(['id', 'name', 'age']) <class 'dict_keys'> dic = {'id': 20190101, 'name': 'Tom', 'age': 20} for key in dic.keys(): print(key, end=' ') #id name age (value同) dic = {'id': 20190101, 'name': 'Tom', 'age': 20} for item in dic.items(): print(item, end=' ') #('id', 20190101) ('name', 'Tom') ('age', 20) dic = {'id': 20190101, 'name': 'Tom', 'age': 20} for key, value in dic.items(): print(key, ':', value) #id : 20190101 #name : Tom #age : 20
例题:将下列数字按大于小于60进行分类
li = [23, 24, 45, 67, 43, 69, 74, 98] dic = {} li1 = [] li2 = [] for i in li: if i >= 60: li1.append(i) else: li2.append(i) dic['>=60'] = li1 dic['<60'] = li2 print(dic) #{'>=60': [67, 69, 74, 98], '<60': [23, 24, 45, 43]}
集合(set())
特点:
- 无序
- 不可重复
- 不可更改
- 内部的元素是可哈希的(不可变的)
- 集合本身是不可哈希的(可变的)
- 用{}括起来的单元素数据集
用途:
- 去重(列表—>集合,自动去重)
- 关系测试
集合的创建:
空集合的创建:
st = set()
st = set()
st1 = {}
print(type(st))
print(type(st1))
#<class 'set'>
#<class 'dict'>
多元素集合的创建:
st = {1, 2, 3, 4}
print(st)
print(type(st))
#{1, 2, 3, 4}
#<class 'set'>
单元素元组的创建:
st = {1}
print(st)
print(type(st))
#{1}
#<class 'set'>
强转:
li = ['City', 'college', 'zhejiang']
st = set(li)
print(st, type(st))
#{'college', 'City', 'zhejiang'} <class 'set'>
sr = 'city'
st = set(sr)
print(st)
#{'y', 'c', 'i', 't'}(无序的)
dic = {'id': 20190101, 'name': 'Tom', 'age': 20}
st = set(dic)
print(st)
#{'name', 'id', 'age'}(只要键而无视value)
集合的基本操作:
增
- set.add()
- set.update()
删
-
set.pop() (删除排序中最小的一个元素)
-
set.discard() (移除元素,不存在,不会报错)
-
set.remove() (移除元素,不存在,会报错)
-
del set
st = {"a", "ab", "c", 1} st.pop() print(st) #{'a', 'ab', 'c'}
改
不可改
查
不可查
遍历
st = {"City", "college", "zhejiang"}
for i in st:
print(i, end=' ')
#City college zhejiang
st = {"City", "college", "zhejiang"}
for i in enumerate(st):
print(i, end=' ')
#(0, 'college') (1, 'City') (2, 'zhejiang')
集合的基本运算:
子集
a = set("abc")
b = set("cdef")
c = set("ab")
print(a, b, c)
print(c < a)
print(c.issubset(a))
print(c < b)
#{'b', 'c', 'a'} {'d', 'f', 'c', 'e'} {'b', 'a'}
#True
#True
#False
交集
-
&
-
set.intersection()
a = set("abc") b = set("cdef") c = set("ab") print(a & b) print(a.intersection(b)) #{'c'} #{'c'}
并集
-
|
-
set.union()
a = set("abc") b = set("cdef") c = set("ab") print(a | b) #{'b', 'f', 'e', 'c', 'd', 'a'}
差集
-
-
set.diffrence()
a = set("abc") b = set("cdef") c = set("ab") print(a - b) #{'a', 'b'}