一. 字典(dict)
- 定义:key-value,键和值可以为任意类型。
#定义方式
dict_tmp = {"name":"san shi", 18:"age"}
print(dict_tmp[18])
#print(dict_tmp["xxx"]) 访问不存在的键会报KeyError
dict_tmp2 = {} #一定要先声明是一个字典再添加元素,否则会报错
dict_tmp2[18] = "age"
dict_tmp2["name"] = "san shi"
#字典在python中是无序的,所以只要成员相同就相等
print(dict_tmp == dict_tmp2)
#dict的value可以为任意类型
dict_tmp2[1] = {0:0, 1:1}
dict_tmp2[2] = (1, 2, 3)
dict_tmp2[3] = [11, 22, 33]
#dict的key只能是不可变类型,官方话是hashable类型
dict_tmp2[(1, 2, 3)] = 111 #ok,tuple不可变
#dict_tmp2[[1, 2, 3]] = 222 error,list和dict是可变类型,不可作为key
二. 字典方法
- keys返回dict_keys类型,values返回dict_values类型,items返回dict_items类型
dict_tmp = {"name":"san shi", 18:"age"}
#keys
print(dict_tmp.keys()) #dict_keys(['name', 18])
for i in dict_tmp.keys():
print(i) #依次打印 name、18
#values
print(dict_tmp.values()) #dict_values(['san shi', 'age'])
for i in dict_tmp.values():
print(i) #依次打印 san shi、age
#items
print(dict_tmp.items()) #dict_items([('name', 'san shi'), (18, 'age')])
#items遍历变量有一个:返回为元组
for i in dict_tmp.items():
print(i)
#依次打印如下:
#('name', 'san shi')
#(18, 'age')
#items遍历变量有两个:将元组中元素分别赋给每一个
for i,j in dict_tmp.items():
print("dict_tmp[{0}] = {1}" .format(i, j))
#依次打印如下
#dict_tmp[name] = san shi
#dict_tmp[18] = age
dict_keys、dict_values、dict_items可以使用list()或tuple()进行转换。
- 可以使用in/not in:
dict_tmp = {"name":"san shi", 18:"age"}
print("name" in dict_tmp) #True,默认在keys中搜索
print("name" in dict_tmp.keys()) #同上
print("age" in dict_tmp.values()) #True
print((18, "age") in dict_tmp.items()) #True
- setdefault:不存在则赋给default值
dict_tmp = {}
for i in "i love you":
#dict_tmp[i] = dict_tmp[i] + 1 会报KeyError,不能这样
dict_tmp.setdefault(i, 0) #正确方式
dict_tmp[i] = dict_tmp[i] + 1
- 还有其他方法,截图如下: