目录

一.字典定义

二.字典的创建

1.通过{}、dict()来创建字典

2. 通过 zip()创建字典

3. 通过 fromkeys 创建值为空的字典 

三.字典的访问

1.[键] 获得“值”

2.get()方法获得“值”

3.列出所有的键值对 

4. 列出所有的键,列出所有的值 

5.len()

6.检测一个“键”是否在字典中

四.字典元素添加、修改、删除

1.添加

2.update()

3.删除

4.popitem()

五.序列解包

六.表格数据使用字典和列表存储

七.字典核心底层原理

1.存放

2.查找

八.集合的定义

1.使用{}创建集合

2.set()

3.. remove()

九.集合相关操作

十.选择结构

1.单分支选择结构

2.双分支选择结构

3.三元条件运算符 

4.多分支选择结构

5.选择结构嵌套 


一.字典定义

字典是“键值对”的无序可变序列,字典中的每个元素都是一个“键值对”,包含:“键 

对象”和“值对象”。“键”不可重复。“值”可以是任意的数据,并且可重复。 

二.字典的创建

1.通过{}、dict()来创建字典

>>> a = {'name':'gaoqi','age':18,'job':'programmer'} 
>>> b = dict(name='gaoqi',age=18,job='programmer') 
>>> a = dict([("name","gaoqi"),("age",18)])

2. 通过 zip()创建字典

>>> k = ['name','age','job'] 
>>> v = ['gaoqi',18,'techer'] 
>>> d = dict(zip(k,v)) 
>>> d 
{'name': 'gaoqi', 'age': 18, 'job': 'techer'}

3. 通过 fromkeys 创建值为空的字典 

>>> a = dict.fromkeys(['name','age','job']) 
>>> a 
{'name': None, 'age': None, 'job': None}

三.字典的访问

1.[键] 获得“值”

>>> a = {'name':'gaoqi','age':18,'job':'programmer'} 
>>> a['name'] 
'gaoqi' 
>>> a['age'] 
18

2.get()方法获得“值”

>>> a.get('name') 
'gaoqi' 
>>> a.get('sex') 
>>> a.get('sex','一个男人') 
'一个男人'

3.列出所有的键值对 

>>> a.items() 
dict_items([('name', 'gaoqi'), ('age', 18), ('job', 'programmer')])

4. 列出所有的键,列出所有的值 

>>> a.keys() 
dict_keys(['name', 'age', 'job']) 
>>> a.values() 
dict_values(['gaoqi', 18, 'programmer'])

5.len()

len(a)
3

6.检测一个“键”是否在字典中

>>> a = {"name":"gaoqi","age":18} 
>>> "name" in a 
True

四.字典元素添加、修改、删除

1.添加

>>>a = {'name':'gaoqi','age':18,'job':'programmer'} 
>>> a['address']='西三旗 1 号院' 
>>> a['age']=16 
>>> a 
{'name': 'gaoqi', 'age': 16, 'job': 'programmer', 'address': '西三旗 1 号院'}

2.update()

>>> a = {'name':'gaoqi','age':18,'job':'programmer'} 
>>> b = {'name':'gaoxixi','money':1000,'sex':'男的'} 
>>> a.update(b) 
>>> a 
{'name': 'gaoxixi', 'age': 18, 'job': 'programmer', 'money': 1000, 'sex': '男的'}

3.删除

>>> a = {'name':'gaoqi','age':18,'job':'programmer'} 
>>> del(a['name']) 
>>> a 
{'age': 18, 'job': 'programmer'} 
>>> b = a.pop('age') 
>>> b 
18

4.popitem()

>>> a = {'name':'gaoqi','age':18,'job':'programmer'} 
>>> a.popitem() 
('job', 'programmer') 
>>> a 
{'name': 'gaoqi', 'age': 18}

五.序列解包

>>> s = {'name':'gaoqi','age':18,'job':'teacher'} 
>>> name,age,job=s   #默认对键进行操作 
>>> name
'name' 
>>> name,age,job=s.items()   #对键值对进行操作 
>>> name 
('name', 'gaoqi') 
>>> name,age,job=s.values()   #对值进行操作 
>>> name 
'gaoqi'

六.表格数据使用字典和列表存储

r1 = {"name":"高小一","age":18,"salary":30000,"city":"北京"} 
r2 = {"name":"高小二","age":19,"salary":20000,"city":"上海"} 
r3 = {"name":"高小五","age":20,"salary":10000,"city":"深圳"} 
tb = [r1,r2,r3] 
#获得第二行的人的薪资 
print(tb[1].get("salary"))   
#打印表中所有的的薪资 
for i in range(len(tb)): 
# i -->0,1,2 
print(tb[i].get("salary"))  
#打印表的所有数据 
for i in range(len(tb)): 
print(tb[i].get("name"),tb[i].get("age"),tb[i].get("salary"),tb[i].get("city"))

七.字典核心底层原理

字典对象的核心是散列表。

1.存放

我们要把”name”=”gaoqi”这个键值对放到字典对象 a 中,首先第一步需要计算键”name”的散列值。Python 中可以通过 hash()来计算。 

>>> bin(hash("name")) 
'-0b1010111101001110110101100100101'

由于数组长度为 8,我们可以拿计算出的散列值的最右边 3 位数字作为偏移量,即 “101”,十进制是数字 5。我们查看偏移量 5,对应的 bucket 是否为空。如果为空,则 将键值对放进去。如果不为空,则依次取右边 3 位作为偏移量,即“100”,十进制是数字4。再查看偏移量为 4的bucket 是否为空。直到找到为空的 bucket 将键值对放进去。

2.查找

>>> bin(hash("name")) 
'-0b1010111101001110110101100100101'

假设数组长度为 8,我们可以拿计算出的散列值的最右边 3 位数字作为偏移量,即“101”,十进制是数字 5。我们查看偏移量 5,对应的 bucket 是否为空。如果为空,则返回 None。如果不为空, 则将这个 bucket 的键对象计算对应散列值,和我们的散列值进行比较,如果相等。则将对 应“值对象”返回。如果不相等,则再依次取其他几位数字,重新计算偏移量。依次取完后, 仍然没有找到。则返回 None。

八.集合的定义

集合是无序可变,元素不能重复。

九.集合创建和删除

1.使用{}创建集合

>>> a = {3,5,7} 
>>> a 
{3, 5, 7} 
>>> a.add(9) 
>>> a 
{9, 3, 5, 7}

2.set()

>>> a = ['a','b','c','b'] 
>>> b = set(a) 
>>> b 
{'b', 'a', 'c'}

3.. remove()

>>> a = {10,20,30,40,50} 
>>> a.remove(20) 
>>> a 
{10, 50, 30}

九.集合相关操作

>>> a = {1,3,'sxt'} 
>>> b = {'he','it','sxt'} 
>>> a|b   #并集 
{1, 3, 'sxt', 'he', 'it'} 
>>> a&b   #交集 
{'sxt'} 
>>> a-b   #差集 
{1, 3} 
>>> a.union(b)   #并集 
{1, 3, 'sxt', 'he', 'it'} 
>>> a.intersection(b)   #交集 
{'sxt'} 
>>> a.difference(b)   #差集 
{1, 3}

十.选择结构

在选择和循环结构中,条件表达式的值为 False 的情况如下: False、0、0.0、空值 None、空序列对象(空列表、空元祖、空集合、空字典、空字 符串)、空 range 对象、空迭代对象。 其他情况,均为 True。

if 3:   #整数作为条件表达式 
print("ok") 
a = []   #列表作为条件表达式,由于为空列表,是 False 
if a: 
print("空列表,False") 
s = "False"   #非空字符串,是 True 
if s:
print("非空字符串,是 True") 
c = 9 
if 3<c<20: 
print("3<c<20") 
if 3<c and c<20: 
print("3<c and c<20") 
if True:   #布尔值 
print("True") 
*******************************

执行结果:

ok
非空字符串,是 True 
3<c<20 
3<c and c<20 
True 
>>>

1.单分支选择结构

num = input("输入一个数字:") 
if int(num)<10: 
        print(num)

2.双分支选择结构

num = input("输入一个数字:") 
if int(num)<10: 
        print(num) 
else:
        print("数字太大")

3.三元条件运算符 

num = input("请输入一个数字") 
print( num if int(num)<10 else "数字太大")

4.多分支选择结构

score = int(input("请输入分数")) 
grade = '' 
if(score<60): 
grade = "不及格" 
if(60<=score<80): 
grade = "及格" 
if(80<=score<90): 
grade = "良好" 
if(90<=score<=100): 
grade = "优秀" 
print("分数是{0},等级是{1}".format(score,grade))

5.选择结构嵌套 

score = int(input("请输入一个在 0-100 之间的数字:")) 
degree = "ABCDE" 
num = 0 
if score>100 or score<0: 
score = int(input("输入错误!请重新输入一个在 0-100 之间的数字:")) 
else:
num = score//10 
if num<6:num=5 
print("分数是{0},等级是{1}".format(score,degree[9-num]))