Python-字典和集合的操作及控制语句

字典

字典是没有顺序的可变序列,他通常都是成对储存,每个元素都有键值对,通过键对象可以找到值对象,键对象是任意不可变对象且不能重复,例如元组,字符串,而值对象可以是任意对象而且可以重复。例:a={'name':'txy','age':'23'}中,name和age就是键对象而txy和123则是值对象

字典的创建

  1. 可以通过dict(),{ }来创建字典对象,例:a={'name':'txy','age':'23'}/a=dict(name:'txy',age:23)/a=dict([("name","txy")("age",23)])
  2. 通过zip创建字典对象 k=['name','age','job'] v=['txy','23','student'],d=dict(zip(k,v))
  3. 通过fromkeys创建值为空的字典 a=dict.fromkeys(['name','age','job'])

字典元素的访问

  1. 通过键来或者值,若键不存在则提示出错
  2. 通过get()方法来获得值,推荐使用,若键不存在返回None或者返回默认返回的对象 a.get("不存在的对象","不存在")
  3. 通过items()来列出所有的键值对
  4. 通过keys()来列出所有的键,通过values()来列出所有的值
  5. len()列出键值对的个数
  6. 用In操作符检测一个键是否在字典中

字典元素的添加修改和删除

  1. 直接添加a['address']='Shanghai', 如果键存在,则覆盖旧的键值对,如果键不存在则添加新的键值对。
  2. 通过update()将新字典中的所有键值对添加到旧字典对象上,如果键存在,则覆盖。a.update(b)#用b完全替换a
  3. 字典中元素的删除可以通过del(),clear()删除所有的键值对,pop()可以删除指定键值对,但是会返回删除的键所对应的值
  4. popitem():随机删除和返回该键值对

序列解包

既可以用于列表也可以用于字典,用途是对多个变量进行赋值。在对字典进行序列解包时,默认是对键进行操作,对键值对操作需要用代码items(),对值进行操作需要用代码values().

用字典和列表对表格进行存储

r1={"品牌":"大众","车型":"SUV","价位":400000,"颜色":"黑色"}
r2={"品牌":"奔驰","车型":"轿车","价位":500000,"颜色":"银色"}
r3={"品牌":"保时捷","车型":"跑车","价位":1200000,"颜色":"红色"}

tb=[r1,r2,r3]

#获得第二行车的颜色
print(tb[1].get("颜色"))

#打印所有价位
for i in range(len(tb)): #i-->0,1,2
    print(tb[i].get("价位"))
    
#打印所有的数据
for i in range (len(tb)):
    print(tb[i].get("品牌"),tb[i].get("车型"),tb[i].get("价位"),tb[i].get("颜色"))

字典核心底层原理

字典中存在许多空白的元素数组,数组的单元叫做bucket,bucket有两个部分,一个是键对象的引用,一个是值对象的引用,可以使用偏移量来访问bucket。

将键值对放入字典的核心过程就是将键放入字典中的索引数字。

先将键变成一个hash值通过hash("name"),在用过bin可以查看其二进制数。如果目标字典的数组值为8,则可以使用最右边三位来找到其对应的索引数字,若是空的则降值放进去,若不是空的则再向左平移三位来确定索引值,直到值被放入,若三分之二的位置满了,则数组会进行扩容。

根据键来查找“键值对”的底层过程

第一步还是和放入的流程一样先将需要的值的键进行hash再通过bin()得到其索引值,若数组对应的索引值为空,则返回None,若不为空则去除这个数组的键,计算其数列值,若相同则说明找到了,若不相同则项佐平移三个继续计算比较。

总结:

  1. 键必须可散列
  2. 字典在内存中消耗巨大
  3. 键查询速度很快
  4. 不要再遍历字典的同时对字典进行修改

集合

集合是元素可变,元素不能重复,集合的底层结构和字典相同,只包含字典的键对象

集合的创建和删除

  1. 用{ }创建集合对象,并使用add()方法来添加元素
  2. 用set()将列表,元组转变为集合
  3. 用remove()来删除指定元素,clear()来清空整个集合

集合相关操作

集合可以通过使用交集(a&b),并集(a|b),差集(a-b)来获得新的集合 

控制语句:

选择结构:选择结构分为单分支结构,双分支结构,多分支结构

单分支结构:通常是if语句,条件表达式可以是逻辑,算术和关系。语句块注意要缩进

条件表达式的值为False的情况有一下几种:False,0,空序列,空迭代,空range对象 除以上情况其他都是True

其外条件表达式中不能有赋值操作

双分支结构:采用if,else语句。

三元条件运算符:条件为真时的值  if(条件表达式) else 条件为假时的值 Print "s小于10"if int (s) <10 else “s大于10”

多分支选择结构:由多个条件表达式组成, 表达式之间必须要有逻辑关系。elif=else if

测试平面象限中点的位置代码:

#测试点在坐标轴的位置
x= int(input("请输出横轴坐标:"))
y= int(input("请输出纵轴坐标:"))

if(x==0 and y==0):
    print("这个点是在原点上")
elif (x==0):
    print("这个点在x轴上")
elif(y==0):
    print("这个点在y轴上")
elif(x>0 and y>0):
    print("这个点在第一象限")
elif(x>0 and y<0):
    print("这个点在第四象限")
elif(x<0 and y<0):
    print("这个点在第三象限")
else:
    print("这个点在第二象限")

选择结构的嵌套:在一个选择结构中再加入一个选择结构,需要注意缩进量来区别不同的选择结构

#选择结构嵌套

score=int(input("请输入一个0-100的数字:"))
num=0
degree="ABCDE"
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]))

while循环结构:循环体中一定需要改变条件表达式的语句

#计算1-100之间的数字的累加和
num=0
sum=0
while num<=100:
    sum=sum+num
    num+=1
print("1-100之间的累加和为:",sum)

 

你可能感兴趣的:(Python-字典和集合的操作及控制语句)