字典是Python中最灵活的数据类型,同样用来存储多个不同类型的数据。但是它和列表、元组还是有一些本质区别的,而且主要是用来存储有关系的数据。
定义及基本特性
1.字典使用键值对来存储数据,相邻的键值对使用逗号分割,最外层使用大括号;
2.键,即key,类似于列表中的索引。值,即value,相当于列表中的元素本身;
3.键与值之间使用:来分割;
4.值可以是任何数据类型,但是键只能是字符串、数字、元组而且必须唯一。
5.字典是无序的。因为字典只能通过键来获得对应的值,因为字典只能通过键来获得对应的值。反过来也就是说当你想获得某个值时,你必须得到 键,已经人为控制了顺序。但是字典本身这种数据类型是无序的。
dic = {"key1":"value1",
"key2":2,
"key3":3.3,
"key4":True}
输出类型及基本的输出操作
1.使用type()获得字典的数据类型;
2.使用print()直接输出字典;
3.使用print()输出指定的键对应的值;
print(dic) # {'key1': 'value1', 'key2': 2, 'key3': 3.3, 'key4': True}
print(type(dic)) # <class 'dict'>
print(dic["key1"]) # value1
字典的基本操作
1.增加数据
字典名[键]= 数据 如果键值已经存在,新的值会覆盖原来的值;
2.删除数据
del 字典名[键]= 数据
字典.pop(键) 删除指定的某个键并返回
字典.clear() 清空字典的数据
dict2 = {"name":"zhangsan",
"age":20,
"height":1.75,
"weight":80}
print("dict2:",dict2) # dict2: {'name': 'zhangsan', 'age': 20, 'height': 1.75, 'weight': 80}
dict2["weight"] = 90
print("修改weight后:",dict2) # 修改weight后: {'name': 'zhangsan', 'age': 20, 'height': 1.75, 'weight': 90}
dict2["birth"] = "1993.11.18"
print("增加birth后:",dict2) # 增加birth后:{'name': 'zhangsan', 'age': 20, 'height': 1.75, 'weight': 90, 'birth': '1993.11.18'}
del dict2["birth"]
print("删除birth后:",dict2) # 删除birth后:{'name': 'zhangsan', 'age': 20, 'height': 1.75, 'weight': 90}
result=dict2.pop("height")
print("删除height后:",dict2)# 删除height后:{'name': 'zhangsan', 'age': 20, 'weight': 90}
print("被删除的值是:",result) # 被删除的值是:1.75
其他方法:
setdefault(键值对):
dict2.setdefault("age",18)
print("setdefault age=18:",dict2) # setdefault age=18: {'name': 'zhangsan', 'age': 20, 'weight': 90}
dict2.setdefault("age1",66)
print("setdefault age1=66:",dict2) # setdefault age1=66 {'name': 'zhangsan', 'age': 20, 'weight': 90, 'age1': 66}
print("setdefault的作用:如果要键值存在,什么也不做;如果键值不存在,则将该键与值添加进字典!")
update(另一个字典):
dict2.update({"name":"new_name","place":"Beijing"})
print(dict2) # {'name': 'new_name', 'age': 20, 'weight': 90, 'age1': 66, 'place': 'Beijing'}
print("A.update(B)的作用:如果B中有与A相同的键,则A中该键值改为B中的键值;如果B中有A不存在的键,则把键值对加入A中!")
字典的专有方法:
1.获得所有的键值;
dict3 = {"name":"lisi","age":25,"birth":"19951118"}
keys = dict3.keys() # dict_keys(['name', 'age', 'birth'])
print(keys)
注意:获得的是一个视图对象,但是在Python2中获得的是一个列表。视图对象占用空间比列表小。获得的视图对象可以使用for key in XXX 遍历:
2. 获得所有的值
values = dict3.values()
3.获得所有的键值对
items = dict3.items()
这三个方法获得的都是视图对象,都可以使用循环遍历。下面演示一个items的经典用法:
items = dict3.items()
for item in items:
print(item)
结果:
('name', 'lisi')
('age', 25)
('birth', '19951118')
遍历item输出的是元组,并且每个元组中有且仅有两个数据。因此,可以利用元组的解包把每一个数据拆开。
items = dict3.items()
for key,value in items:
print(key)
print(value)
结果:
name
lisi
age
25
birth
19951118
一个有趣的东西:
chartomosi = {
'a' : '.-',
'b' : '-...',
'c' : '-.-.',
'd' : '-..',
'e' : '.',
'f' : '..-.',
'g' : '--.',
'h' : '....',
'i' : '..',
'j' : '.---',
'k' : '-.-',
'l' : '.-..',
'm' : '--',
'n' : '-.',
'o' : '---',
'p' : '.--.',
'q' : '--.-',
'r' : '.-.',
's' : '...',
't' : '-',
'u' : '..-',
'v' : '...-',
'w' : '.--',
'x' : '-..-',
'y' : '-.--',
'z' : '--..'
}
mositochar = {
'.-' : 'a',
'-...' : 'b',
'-.-.' : 'c',
'-..' : 'd',
'.' : 'e',
'..-.' : 'f',
'--.' : 'g',
'....' : 'h',
'..' : 'i',
'.---' : 'j',
'-.-' : 'k',
'.-..' : 'l',
'--' : 'm',
'-.' : 'n',
'---' : 'o',
'.--.' : 'p',
'--.-' : 'q',
'.-.' : 'r',
'...' : 's',
'-' : 't',
'..-' : 'u',
'...-' : 'v',
'.--' : 'w',
'-..-' : 'x',
'-.--' : 'y',
'--..' : 'z',
}
s1='beijing'
for i in s1:
print(i,type(i),chartomosi[i])
结果:
b <class 'str'> -...
e <class 'str'> .
i <class 'str'> ..
j <class 'str'> .---
i <class 'str'> ..
n <class 'str'> -.
g <class 'str'> --.