字典特点
- 用
{}
来表示,按照key:value
来表示字典中的元素,其中key
是键,value
是值,key-value就是键值对。同样的,可以申明一个字典变量。
fruit = {"apple":1,"pear":2,"orange":3}
print(fruit) # 结果为:{'apple': 1, 'pear': 2, 'orange': 3}
- 键值对,必须共同出现,不能只有一个
-
key
必须是字符换,value
可以是任意对象,同理list(数值,字符串,序列,字典) - 字典是一个无序集合。序列由于没有key来做对应,所以以顺序来对应值。序列有顺序,字典没有!
- key是唯一的。
dic = {'a':1,'a':2}
print(dic) #结果为:{'a': 2}
dic1 = {'a':1,'b':2}
dic2 = {'b':22,'c':3}
dic1.update(dic2) # 合并字典
print(dic1) #结果为:{'a': 1, 'b': 22, 'c': 3}
- 可以任意添加、删减元素;可以嵌套,也就是字典就包含字典。
dic1 = {'a':1,'b':2}
del dic1['a']
print(dic1) #结果为:{'b': 2}
申明字典
- 最简单的方式
dic = {'a':1,'b':2}
- dict()函数
a = dict(m=10,n="aa",h=100) #等号前不需要加引号
print(a) #结果为:{'m': 10, 'n': 'aa', 'h': 100}
- 由序列生产一个字典
lst = [('a','f'),('b','ggg')]
lst2 = [['a','f'],['b','ggg']]
lst3 = (('a','f'),('b','ggg'))
dict(lst) #结果为:{'a': 'f', 'b': 'ggg'}
dict(lst2) #结果为:{'a': 'f', 'b': 'ggg'}
dict(lst3) #结果为:{'a': 'f', 'b': 'ggg'}
- 只有key的列表下,直接生产字典
keys = ['a','b','c']
m = dict.fromkeys(keys)
print(m) #结果为:{'a': None, 'b': None, 'c': None}
m['a'] = 1
print(m) #结果为:{'a': 1, 'b': None, 'c': None}
元素访问及遍历
- 判断是否包含一个key,同list。
key in/not in dict
m = {'a':1,'b':2,'c':3}
'b' in m #结果为:True
'd' in m #结果为:False
'd' not in m #结果为:True
- 查看一个元素的value:用key做指向,核心-key必须存在。
m = {'a':1,'b':2,'c':3}
n = m['a']
print(n) #结果为:1
- 嵌套字典的元素value查找
poi = {'name':'shop','city':'shanghai','information':{'address':'somewhere','num':123456}}
print(poi['information']['address']) #结果为:somewhere
- 使用get函数查找元素的value
m = {'a':1,'b':2,'c':3}
n = m.get('a')
print(n) #结果为:1
n = m.get('d','no-key')
print(n) #结果为:no-key
- 返回全部字典key。
dict.key()
用type
查看,输出的是视图,可以用list()
得到key的列表。
m = {'a':1,'b':2,'c':3}
n = m.keys()
print(n) #结果为:dict_keys(['a', 'b', 'c'])
type(n) #结果为:dict_keys
k = list(m.keys())
print(k) #结果为:['a', 'b', 'c']
type(k) #结果为:list
- 返回字典的全部元素
dict.items()
用type
查看,输出的是视图,可以用list()
得到键值对的列表。
m = {'a':1,'b':2,'c':3}
n = m.items()
print(n) #结果为:dict_items([('a', 1), ('b', 2), ('c', 3)])
type(n) #结果为:dict_items
k = list(m.items())
print(k) #结果为:[('a', 1), ('b', 2), ('c', 3)]
type(k) #结果为:list
- 遍历所有key、value
m = {'a':1,'b':2,'c':3}
for i in m.keys():
print(i) #结果为:a\nb\nc
for i in m.values():
print(i) #结果为:1\n2\n3
- 遍历所有items
m = {'a':1,'b':2,'c':3}
for (k,v) in m.items():
print("{}-{}".format(k,v)) #结果为:a-1\nb-2\nc-3
字典通用操作
-
修改一个值
dict[key] = newvalue
-
删除一个值
del dict[key]
-
更新/合并一个键值对
dict1.update(dict2)
注意,dict2字典合并到dict1中 -
字典复制
dict.copy()
m = dic
m和dic指向同一个字典 -
弹出值
dict.pop(key)
dict.pop(key,'no-key')
-
弹出整个键值
dict.popitem()
-
dict和list另一个不同,value不仅仅可以包含任何数据类型,也可以包含行为:函数
def a() :
print("apple pie")
dic = {'fun':a}
dic['fun']() #结果为:apple pie
dic = {'fun':a()} #直接出结果为:apple pie
- 字典里,用方法的时候使用
()
,访问对象时、删除时使用[]
。
练习
随机新建一个字典结构,key包含姓名,学号,成绩,新建3个学生的字典,并组成字典列表。
st1 = {"姓名":"小明","学号":"001","成绩":93}
st2 = {"姓名":"小红","学号":"002","成绩":90}
st3 = {"姓名":"小丽","学号":"003","成绩":69}
m = [st1,st2,st3]
print(m)
#################################
name = ["小明","小红","小丽"]
num = ["001","002","003"]
score = [90,80,87]
k = {"姓名","学号","成绩"}
st1 = dict.fromkeys(k)
st = [st1,st1.copy(),st1.copy()]
for i in st:
n = st.index(i)
i["姓名"] = name[n]
i["学号"] = num[n]
i["成绩"] = score[n]
print(st)
网友评论