字典:(相当于php中的关联数组,js中的json)
PS:字典不是序列类型,而是映射类型
创建字典:
# 1.直接定义
dict1={"a":1,"b":2,"c":3}
# 类似于json
# 2.使用dict()函数
dict1=dict((("a",1),("b",2),("c",3))) #传一个二位元组
dict1=dict(("a",1),("b",2),("c",3)) #不行,因为dict只有一个参数
dict1=dict(a=1,b=2,c=3) #也可以,但是要注意,这样定义时键不要加引号
#访问:
dict1["a"]
#添加元素或者修改元素:
dict1["a"]=100
dict1["e"]=5 #添加
当然它和json不同的是,字典的键也可以是数字
#字典的方法:
dict1.fromkeys() #创建一个新的字典
#如:
dict1.fromkeys((1,2,3))
#得到:{1:None,2:None,3:None}
dict1.fromkeys((1,2,3),"a")
#得到:{1:"a",2:"a",3:"a"}
dict1.fromkeys((1,2,3),("a","b","c"))
#得到:{1:("a","b","c"),2:("a","b","c"),3:("a","b","c")}
dict1.fromkeys(range(10),"hello")
#得到...
字典的遍历:
dict1={"a":1,"b":2,"c":3}
#遍历所有的值
for val in dict1:
print(val)
#或者
for val in dict1.keys():
print(val)
#会遍历出所有键:a,b,c
for val in dict1.value():
print(val)
#会遍历出所有值:1,2,3
for val in dict1.items():
print(val)
#会遍历出所有项,每个项以元祖的形式呈现:
#('a', 100)
#('b', 2)
#('c', 3)
#('e', 5)
#可以这样
for i,v in dict1.items():
print(i,v)
#a 100
#b 2
#c 3
#e 5
如果访问字典中不存在的元素:
dict1["z"]
会报错
如果不想他报错,可以这样:
dict1.get("z")
没有就会返回None
#还可以设置默认值
dict1.get("z",26)
#判断某下标的元素是否存在
print("z" in dict1)
#将字典清空:
dict1.clear()
dict1={} #不推荐,二者有区别,前者可以将该字典的所有引用干掉。
# 浅拷贝
dict2=dict1.copy()
#他和dict2=dict1的区别是,后者是同一个引用
# 随机弹出一个元素
dict1.popitem()
# 弹出的是一个元祖
# 字典的元素是没有顺序的。
# update() 用一个字典更新另一个字典的元素
dict1={"a":1,"b":2,"c":3}
dict2={"c":30}
dict1.update(dict2)
print(dict1)
# 得到:{'a': 1, 'b': 2, 'c': 30}
字典推导式(有下标):{下标:值(这个值是个表达式) for i in xxx}
例如:
{i:i%2==0 for i in range(10)}
得到:
{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}
将字典的下标和值对调:
list1={'a': 1, 'b': 2, 'c': 30}
list1={v:k for k,v in list1.items()}
集合:
集合也是用{}定义,但是他没有下标,只有值。所以就无法使用索引来访问里面的值
set1={1,2,3,4,5}
他的特性是唯一,里面的元素都是唯一的:
set1={1,2,3,4,5,5,4,3,2,1}
此时不会报错,而是会将里面的重复元素干掉!
set1=set([1,2,3,4,5])
其实与其说set()方法是定义集合,还不如说他是将其他类型转为集合类型。
如str()/int()/list()/tuple()/dict()都是这样
所以如何将[0,1,2,3,4,5,5,3,1]中重复的元素干掉呢
list(set([0,1,2,3,4,5,5,3,1]))
即可
当然也可以这样:
list1=[0,1,2,3,4,5,5,3,1]
temp=[]
for val in list1:
if val not in list1 :
temp.append(val)
print(temp)
set可以遍历,set也可以通过in 和 not in 来判断某值是否在集合中
#添加一个元素
set1.add(元素)
#干掉
set1.remove(元素)
#定义一个不可变元素:
set1=frozenset([1,2,3,4,5])
然后这个集合就不可以使用add和remove方法
集合推导式:
{i的表达式 for i in xxx}
如:
{i for i in [1,2,3,4,5,6,5,4,3,2,1]}
得到
{1, 2, 3, 4, 5, 6}