参考资料:Python网红Alex b站
只读列表,一旦创建,不可修改。只可进行查询、切片、循环操作。
# 注意点 必须加逗号
>>> num =(1)
>>> type(num)
<class 'int'>
>>> num=(1,)
>>> type(num)
<class 'tuple'>
# 元组无法修改
>>> names = ('taohy','dabao')
>>> names
('taohy', 'dabao')
>>> names[1]='dadabao'
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: 'tuple' object does not support item assignment
1. key value的结构 {key1:value, key2:value2, key3:value3}
2. key必须是不可变数据类型(字符串、数字、元组)
3. key必须是唯一的
4. 一个key对应的value可以是任意数据类型
5. 可嵌套,value可以是dict
6. python3.7之前是无序的,之后是有序的 order_dict
7. 字典查询速度快、操作方便
# 创建 一般用第一种方式
# 增
1. 直接给key赋值,如果未存在,新增;如果已存在,修改。
>>> people={"name":'taohy','age':30,'hobby':'swimming'}
>>> type(people)
<class 'dict'>
>>> people['isMarry']=False
>>> people
{'name': 'taohy', 'age': 30, 'hobby': 'swimming', 'isMarry': False}
2. 检查式新增,如果不存在,新增;如果已存在,返回对应的value。
>>> people
{'name': 'taohy', 'age': 30, 'hobby': 'swimming', 'isMarry': False}
>>> people.setdefault('name','aa')
'dabao'
>>> people.setdefault('job','developer')
'developer'
>>> people
{'name': 'dabao', 'age': 30, 'hobby': 'swimming', 'isMarry': False, 'job': 'developer'}
>>>
# 改
# 普通修改
>>> people
{'name': 'taohy', 'age': 18}
>>> people['name']='dabao'
>>> people
{'name': 'dabao', 'age': 18}
# 合并修改 把新的字典每个key更新到新的value
>>> people
{'name': 'dabao', 'age': 18}
>>> oldpeople={'age':80,'name':'laobao','job':'retired'}
>>> oldpeople
{'age': 80, 'name': 'laobao', 'job': 'retired'}
>>> people.update(oldpeople)
>>> people
{'name': 'laobao', 'age': 80, 'job': 'retired'}
>>>
# 查
# get方法 不存在的话返回None
>>> people
{'name': 'taohy', 'age': 60, 'job': 'developer'}
>>> people.get('hobby')
>>> print(people.get('hobby'))
None
#直取 不存在的话会报错
>>> people['hobby']
Traceback (most recent call last):
File "" , line 1, in <module>
KeyError: 'hobby'
# 判断是否在dict里面 对应的key判断
>>> people
{'name': 'taohy', 'age': 60, 'job': 'developer'}
>>> 'name' in people
True
>>> 'hobby' in people
False
# 删
# names.pop('key') 删除key不存在的报错
>>> people
{'name': 'taohy', 'age': 60, 'job': 'developer'}
>>> people.pop('hobby')
Traceback (most recent call last):
File "" , line 1, in <module>
KeyError: 'hobby'
>>> people.pop('age')
60
# del names['key'] 不存在key报错
>>> people
{'name': 'taohy', 'job': 'developer', 'age': 30}
>>> del people['age']
>>> del people['hobby']
Traceback (most recent call last):
File "" , line 1, in <module>
KeyError: 'hobby'
# names.popitem() 以LIFO最后进来先删除 一对数
>>> people['age']=30
>>> people
{'name': 'taohy', 'age': 30}
>>> people.popitem()
('age', 30)
>>> people
{'name': 'taohy'}
# 清空
>>> people.clear()
>>> people
{}
所有keys
所有values
所有items
>>> people
{'name': 'taohy', 'age': 30, 'job': 'developer'}
>>> people.keys()
dict_keys(['name', 'age', 'job'])
>>> people.values()
dict_values(['taohy', 30, 'developer'])
>>> people.items()
dict_items([('name', 'taohy'), ('age', 30), ('job', 'developer')])
>>> for k,v in people.items(): print(k,v)
...
name taohy
age 30
job developer
for k in dict.keys()
for v in dict.values()
for k,v in dict.items()
for k in dict # 推荐的方法
>>> for k in people:print(k,people[k])
...
name taohy
age 30
job developer
# fromkeys 批量生成dict
>>> people=['taohy','dabao','xiaobao']
>>> print(people)
['taohy', 'dabao', 'xiaobao']
>>> dict.fromkeys(people,0)
{'taohy': 0, 'dabao': 0, 'xiaobao': 0}
>>> dict.fromkeys(people,'developer')
{'taohy': 'developer', 'dabao': 'developer', 'xiaobao': 'developer'}
# 求长度 len(info)
>>> len(people)
3
基于hashtable,查询速度O(1)
# 查找100
方法一:
1. 先排序
2. 二分查找的方法
方法二 hashtable
>>> hash('taohy')
9011185021800041913
>>> hash('dabao')
2750307866407919365
# 1. 生成一个包含100的个key的字典,每个value的值不能一样
# 2. {'k0':0,'k1':1,'k2':2,'k3':3,'k4':4,'k5':5,'k6':6,'k7':7,'k8':8},请把字典中key大于5的value打印出来。
# 3. 把题2中value是偶数的统一改成-1
# 4. 把下面列表中的值进行分类,变成dict
input : test_list=[4,6,6,4,2,2,4,8,5,8]
output = {4:[4,4,4],6:[6,6],2:[2,2],8:[8,8],5:[5]}
需求:值一样的要分类存在一个key里
# 5. 把一段话里重复的单词去掉
input: Python is great and Java is also great
Output: is also Java Python and great
# 6. 写程序输出dict中values中唯一的值
dict = {'qfg':[5,6,7,8],'best':[6,12,10,8],'is':[10,11,7,5],'for':[1,2,5]}
结果:[1,2,5,7,8,10,11,12]
# 7. 把所有下表中同字母异序词找出来
arr = ['cat','dog','tac','act','god']
结果:[['cat','act','tac'],['god','dog']]
# 创建
>>> a= {3}
>>> type(a)
<class 'set'>
# 帮列表去重 最快速的方法,转换成集合,再转换成列表
>>> li = ['taohy','taohy','dabao']
>>> set(li)
{'dabao', 'taohy'}
>>> type(set(li))
<class 'set'>
>>> li_new = list(set(li))
>>> li_new
['dabao', 'taohy']
# 1. 增
>>> a.add(1)
>>> a
{1, 2, 3, 4}
>>> a.add(5)
>>> a
{1, 2, 3, 4, 5}
# 2. 查
>>> a
{1, 2, 3, 4, 5}
>>> 5 in a
True
>>> 3 in a
True
# 3.改
一旦创建,不能修改
4. 删除
a.pop() # 随机删除
a.remove(3) # 删除指定值 如果不存在删除,报错
a.discard(3) # 删除指定值,如果不存在删除,不报错
>>> a
{2, 3, 4, 5}
>>> a.pop()
2
>>> a.remove(5)
>>> a
{3, 4}
>>> a
{3, 4}
>>> a.remove(5)
Traceback (most recent call last):
File "" , line 1, in <module>
KeyError: 5
>>> a.discard(5)
>>> a
{3, 4}
>>> a.discard(3)
>>> a
{4}
# 交集 &
>>> dict_test1 = {1,2,3,4,5}
>>> dict_test2={1,5,6,2,8}
>>> dict_test1 & dict_test2
{1, 2, 5}
# 并集 |
>>> dict_test1 | dict_test2
{1, 2, 3, 4, 5, 6, 8}
# 差集 -
>>> dict_test1 - dict_test2
{3, 4}
>>> dict_test2 - dict_test1
{8, 6}
>>>
# 对称差集 ^
>>> dict_test2 ^ dict_test1
{3, 4, 6, 8}
# 子集 issubset
>>> dict_test1 = {1,2}
>>> dict_test2={1,2,3,4}
>>> dict_test1.issubset(dict_test2)
# 父集 issuperset
>>> dict_test1 = {1,2}
>>> dict_test2={1,2,3,4}
>>> dict_test2.issuperset(dict_test1)
True
# 二进制转换成十进制
>>> int(0b0101)
5
# 十进制转换成二进制
>>> bin(3)
'0b11'
# ASCII表
# ord 字符对应的十进制
>>> ord('a')
97
>>> ord('A')
65
>>> ord('v')
118
# Chr 十进制对应的字符
>>> chr(90)
'Z'
>>> chr(56)
'8'
>>> chr(133)
'\x85' # 特殊字符
1980年 gb2312 包括 6763个汉字和682的字符 2个字节 代表一个中文
UTF-8 :使用1,2,3,4个字节表示字符。最多4个字符。英文1个字节、欧洲语系2个、东亚3个、其他极特殊的字符占4个。
UTF-16
UTF-32
注意:UTF是为了unicode编码 设计的一种在存储和传输时节省空间的编码方案,他是Unicode的一种实现方式。
参考:
unicode官网:https://home.unicode.org/
unicode中文表:http://www.chi2ko.com/tool/cjk.htm
python2 默认是ASCII,报错,解决就得顶上加上标注encoding:utf-8来告诉py解释器。
python3是UTF-8。
windows系统默认的编码是gbk,导致打印出来是乱码。所以在windows顶上encoding:gbk来告诉py解释器。
# 十六进制
>>> hex(20)
'0x14'
>>> bin(0xe8)
'0b11101000'
# 简单写法
>>> age =18
>>> status = '成年' if age>18 else '未成年'
>>> status
'未成年'
# 三元嵌套