基本定义
字典: 字典(dict)是一种可变无序的集合,以键值对作为基本的元素,用大括号“{}”表示开始和结束,元素之间以逗号隔开。字典是一种典型的一对一的映射关系的数据类型;
键值对: 由键(key)以及值(value)组成,中间以冒号“:”隔开;
d1 = {1:'1',2:'2',3:'3'}
d2 = dict() #空字典
d3 = {} #空字典
字典中的键的唯一的,如果出现两个同样的键的时候,后一个会替换掉前一个;
字典的值不是唯一的;
字典的值可以是任何数据类型,但是字典的键必须是不可变的数据类型(如:数字,字符串,元组等)
字典在使用的过程中,不允许对字典的键进行直接的修改;
增加字典元素
1.赋值语句增加元素
d = {1:"Apple",2:"Pear",3:"Orange"}
d[0] = "Banana" #键在字典中不存在,新增键值对;
d[1] = "Lemon" #键在字典中已经存在,修改原有键对应的值;
print(d)
结果如下:
{1:'Lemon',2:'Pear',3:'Orange',0:'Banana'}
2.setdafault()方法
d = {1:"Apple",2:"Pear",3:"Orange"}
d.setdefault(0,'banana') #键在字典中不存在,新增键值对;
d.setdefault(1,"Lemon") #键在字典中已经存在,返回原字典的键对应的值;
print(d)
结果如下:
{1:'Apple',2:'Pear',3:'Orange',0:'Banana'}
setdefault()方法增加字典元素时,如果增加的键在字典中已经存在,不会修改字典中原有的键值;
字典值查询
1字典名+key查找(下标查找)
d={1:"Apple",2:"Pear",3:"Orange",0:"Banana"}
print(d[1]) ## 当指定的键不存在是,报错;
print(d[0])
结果如下:
'Apple'
'Banana'
get()方法
d={1:"Apple",2:"Pear",3:"Orange",0:"Banana"}
print(d.get(1,"查找的键不存在")) #键存在时返回对应的值;
print(d.get(5,"查找的键不存在")) #键不存在时返回指定的值,默认是None;
结果如下:
'Apple'
'查找的键不存在'
字典值修改
1.赋值修改(见“赋值语句增加元素”)
2.update()方法修改对应的值
d1={1:'Mary',2:'Bob',3:'Mike'}
d2={3:'Jack',4:'John'}
d1.update(d2) #d2的键在d1中存在时,修改对应的值,不存在是,新增键值对;
print(d1)
d1.update({5:'Cindy'}) #新增键值对;
print(d1)
结果如下:
{1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John'}
{1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'}
字典元素删除
1.del函数
d1 = {1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'}
del(d1[1]) #删除字典中键为1的键值对,键不存在是报错;
print(d1)
del(d1) #删除整个字典,删除后d1不存在
print(d1)
结果如下:
{2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'} #d1[1]已经被删除
raceback (most recent call last): #d1对象已经被删除,d1未定义
File "<pyshell#65>", line 1, in <module>
d1
NameError: name 'd1' is not defined
2.pop()方法
pop()方法删除指定的键对应的元素;
d1 = {1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'}
name = d1.pop(2,"删除元素不存在") #删除键存在时,返回对应的值
print(d1, ' + ', name)
name = d1.pop(10, "删除元素不存在") #删除键不存在时,返回指定值,不指定时,报错;
print(d1, ' + ', name)
结果如下:
{1: 'Mary', 3: 'Jack', 4: 'John', 5: 'Cindy'} + Bob
{1: 'Mary', 3: 'Jack', 4: 'John', 5: 'Cindy'} + 删除元素不存在
3.popitem()方法
popitem()方法随机返回字典的一个键值对对应的元组,并且删除字典中的对应元素,空字典调用popitem()方法会报错;
d1 = {1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'}
print(d1.popitem()) #返回值是一个元组;
print(d1)
结果如下:
(5, 'Cindy')
{1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John'}
4.clear()
clear()方法清空字典;
d1 = {1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'}
d1.clear()
print(len(d1))
print(d1)
结果如下:
0
{}
字典遍历操作
1.items()方法遍历所有键值对
d1 = {1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'}
for i in d1.items():
print(i) #i的数据类型是元组
print(d1.items())
print(type(d1.items())) #d1.items()是一个函数或者方法
结果如下:
(1, 'Mary')
(2, 'Bob')
(3, 'Jack')
(4, 'John')
(5, 'Cindy')
dict_items([(1, 'Mary'), (2, 'Bob'), (3, 'Jack'), (4, 'John'), (5, 'Cindy')])
<class 'builtin_function_or_method'>
2.遍历字典的所有键
通过字典变量直接遍历或者通过keys()方法获取字典键值然后遍历;
d1 = {1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'}
print("通过字典遍历直接遍历:")
for i in d1:
print(i)
print("通过keys方法字典键值进行遍历:")
for i d1.keys():
print(i)
结果如下:
通过字典遍历直接遍历:
1
2
3
4
5
通过keys方法字典键值进行遍历:
1
2
3
4
5
3.遍历字典所有的值
通过遍历获取字典的键,然后通过字典的键来访问字典的值;
d1 = {1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'}
print("通过字典遍历直接遍历:")
for i in d1:
print(d1[i]) #下标访问字典的值
print("通过keys方法字典键值进行遍历:")
for i in d1.keys():
print(d1.setdefault(i)) #通过setdefault()方法访问字典中存在的键对应的值
结果如下:
通过字典遍历直接遍历:
Mary
Bob
Jack
John
Cindy
通过keys方法字典键值进行遍历:
Mary
Bob
Jack
John
Cindy
通过value()方法直接遍历字典的值;
d1 = {1: 'Mary', 2: 'Bob', 3: 'Jack', 4: 'John', 5: 'Cindy'}
print("通过values()方法直接遍历:")
for i in d1.values():
print(i) #下标访问字典的值
结果如下:
通过values()方法直接遍历:
Mary
Bob
Jack
John
Cindy
字典其他的函数和方法
内置函数
函数 | 描述 |
---|---|
cmp(dict1,dict2) | 比较两个字典对象(python3.0没有这个函数) |
len() | 返回字典长度 |
str() | 字典转换成字符串 |
type() | 返回变量类型 |
操作方法
方法 | 描述 |
---|---|
d.clear() | 清空字典元素 |
d.copy() | 字典复制(浅复制) |
d.fromkeys(seq,val) | 生成以seq中的元素为键,值为val的字典(如果seq为字符串,那么生成的字典键为字符串的单个字符) |
d.get(key) | 返回指定键对应的值(不存在是返回空) |
d.has_key(key) | 判断指定键是否在字典内,在返回True,否则返回False |
d.items() | 以列表的形式返回字典中所有的键值对元组 |
d.keys() | 返回字典所有的键 |
d.setdefault(key,value) | 查找指点键对应的值,如果键不存在,新增键值对; |
d.pop(x[,d]) | 抛出并删除字典元素,键值不存在时,如果指定d,则返回d,否则报错 |
d.popitem() | 随机抛出键值对元组,并且删除字典中的对应元素; |
d. value() | 返回字典中所有的值 |
d.update(d1) | 根据d1更新字典d,把d1中独有的键值对新增到d中,共有的修改为d1的值 |