python字典
字典(dict, dictionary的简写)是Python中另一个非常重要的内置数据类型,是Python中映射类型(Mapping Type),它把“键”(key)映射到“值”(value),通过key可以快速找到value,它是一种“键值对”(key-value)数据结构。
“键”,可以是任意不可变的类型对象(可以做hash,即具有hash()和eq()方法的对象),通常是字符串和数字,同一个字典中键是唯一的。但不能是list,因为list可以通过索引、切片、append()和extend()方法改变其值。
“值”,可以是任何类型的数据
d1 = dict()
d2 = {}
data1 = [("张三",88),("李四",87),("王五",90)]
d2 = dict(data1)
print(d2)
data2 = dict(name="summer",age=23,height=172)
print(data2)
字典的基本用法
字典包含多个 key-value 对,而 key 是字典的关键数据,因此程序对字典的操作都是基于 key 的。
通过 key 访问 value 。
通过 key 添加 key-value 对。
通过 key 删除 key-value 对。
通过 key 修改 key-value 对。
通过 key 判断指定 key-value 对是否存在。
通过 key 访问 value 使用的也是方括号语法,就像前面介绍的列表和元组一样,只是此时在方括号中放的是 key,而不是列表或元组中的索引
data2 = dict(name="summer",age=23,height=172)
print(data2)
print(data2["name"])
data2["scores"] = 500
print(data2)
del data2["height"] # 删除字典中的某个键值对
print(data2)
data2["name"] = "spring"
print(data2)
print("weight" in data2)
print("age" in data2)
通过上面介绍可以看出,字典的 key 是它的关键。换个角度来看,字典的 key 就相当于它的索引,只不过这些索引不一定是整数类型,字典的 key 可以是任意不可变类型。
可以这样说,字典相当于索引是任意不可变类型的列表:而列表则相当于 key 只能是整数的字典。因此,如果程序中要使用的字典的 key 都是整数类型,则可考虑能否换成列表。
此外,还有一点需要指出,列表的索引总是从 0 开始、连续增大的;但字典的索引即使是整数类型,也不需要从 0 开始,而且不需要连续。因此,列表不允许对不存在的索引赋值:但字典则允许直接对不存在的 key 赋值,这样就会为字典增加一个 key-value 对。
列表不允许对不存在的索引赋值,但字典则允许直接对不存在的 key 赋值。
字典推导式
data3 = { k:k**2 for k in range(1,11) if k%2==0}
print(data3)
data3_reversal = {v: k for k,v in data3.items()}
print(data3_reversal)
for k,v in data3_reversal.items():
print("key : {}, value:{}".format(k,v))
# Python 字典 items() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回可遍历的(键, 值) 元组数组
字典的常用方法
data3 = { k:k**2 for k in range(1,11) if k%2==0}
print(data3.get("2")) # 通过key获取value
data3.update({2:6,4:64}) # 通过key更新
print(data3)
data3.clear() # 清空字典
print(data3)
# 字符串模板中使用key
temp = '我的名字:%(name)s, 身高:%(height)010.2f, 学校:%(school)s'
book = {'name':'大大', 'height': 99, 'school': '小小大学'}
# 使用字典为字符串模板中的key传入值
print(temp % book)
len()
返回字典的长度,是键的个数,也是值的个数,也是键值对的个数。空字典的长度是0
any()和all()
类似于对列表、tuple的操作,不过这两个函数检验的是字典的键(key)。
any(): 只要字典有一个键为True则返回True;
all(): 只有字典的所有键都为True才返回True;
sorted()
跟操作列表、tuple的效果一样,它把字典的所有key当做一个列表(或元组)进行排序
in 运算符
跟列表,元组一样,in用来检验一个key是不是在字典中
keys()
返回键(key)的view对象(类型是:dict_keys)。这个view对象可以动态查看字典内部的对象,当字典改变后,这个view对象也会反应变化。
values()
返回值(value)的view对象,dict_values。
items()
返回键值对(key-value)的view对象:dict_items
copy()
在Python中,把列表,字典对象赋值给变量时,都是“浅拷贝”,即,变量指向了对象,原来的对象改变了,这个变量的值也会跟着变。而cop()函数是“深拷贝”,重新创造一个新对象赋值给变量,原来的对象的改变不影响新对象
data3 = { k:k**2 for k in range(1,11) if k%2==0}
data4 = data3
print(data4)
data5 = data3.copy()
data5.update({2:1,4:2,8:4,10:5})
print(data5)
print(sorted(data5))
d = dict()
print(d.fromkeys([1,2,3]))
print(d.fromkeys([1,2,3,],0))
#fromkeys()通过一个序列来初始化字典