一、概念
1.定义
字典是另一种可变容器模型,且可存储任意类型对象。是可变数据类型
字典类型的创建
1.字典的每个键值key=>value对用冒号:分隔,每个键值对之间用逗号,分割,整个字典包括在花括号{}中
d = {key1:value1,key:value}
2.使用内置函数dict()创建字典
- 通过映射函数创建字典
zip(lst1,lst2)
键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一的。
值可以去任何数据类型,但键必须不可变得,如字符串,数字或元组:
dit = {'alice':'2341','betch':'4567','ceil':'1234'}
也可如此创建字典:
dict1 = 6:37}{'abc':456}
dict2 = {'abc':123,98}
''' 创建字典 ''' #方法一: dit = {'cat':'www','dog':'mmm'} #方法二: lst1 = [10,20,30] lst2 = ['cat','dog','car'] zipobj = zip(lst1,lst2) d = dict(zipobj) #方法三:首参数创建 t = (10,20,30) print({t:10})
2.访问字典里的值
把相应的键放入熟悉的方括弧
下面代码中,获取键的值得方法的区别:
如果key不存在,dict[key]报错,dict.get(key)可以指定默认值
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print("dict['Name']: ", dict['Name'])#1.获取键得值
print("dict['Age']: ", dict['Age'])
print(dict.get('Name'))#2.获取键的值
输出结果:
如果用字典里没有的键访问数据,会输出错误如下:
3.修改字典
向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值
dict = {'Name':'zara','age':7,'class':'first'}
dict['age'] = 8 #更新
dict['school'] = 'runoob' #添加 dict
输出结果:
注意:键值对的排列顺序与添加顺序不同
4.删除字典元素
能删单一的元素也能清空字典,清空只需一项操作
注意:删除的键值对永远消失了
字典中key是无序的
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name'] # 删除键是'Name'的条目
dict.clear() # 清空字典所有条目
del dict # 删除字典
5.字典键的特性
字典值可以没有限制地去任何Python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
2个重要的点需要记住:
- 不允许同一个键出现2次。创建时如果同一个键被复制两次,后一个只会被记住
- 键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行
6.遍历字典
6.1遍历所有键值对
shuren ={ "first_name": "杨", "last_name": "一", "age":"1", "city":"chognqin", }
for key,value in shuren.items(): print("\nKey:" + key) print("Value:" + value)
对于遍历字典使用for循环,其中key和value可用任何名称代替
items()返回键值对列表
注意:遍历字典时,键值对的返回顺序与存储顺序不同
6.2遍历字典中所有键
shuren ={ "first_name": "杨", "last_name": "一", "age":"1", "city":"chognqin", }
#遍历所有键
for key in shuren.keys(): print(key.title())
keys()返回一个列表,其中包含字典中的所有值
6.3按顺序遍历字典中的所有键
要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。
shuren ={ "first_name": "杨", "last_name": "一", "age":"1", "city":"chognqin", }
#按顺序遍历字典中的所有键
for key in sorted(shuren.keys()): print(key)
6.4遍历字典中所有值
使用values()方法,返回一个值得列表,而不包含任何键。
shuren ={ "first_name": "杨", "last_name": "一", "age":"1", "city":"chognqin", }
#遍历字典中所有的值
for value in shuren.values(): print(value.title())
如果需要提取大量数据,且数据之间存在重复项,为剔除重复项,可使用集合(set)
shuren ={ "first_name": "杨", "last_name": "一", "age":"1", "city":"chognqin", "number":"1", }
#遍历字典中所有的值,剔除重复项
for value in set(shuren.values()): print(value.title())
二、字典内置函数&方法
1.内置函数
序号 | 函数及描述 |
1 | cmp(dict1,dict2) 比较2个字典元素 |
2 | len(dict) 计算字典元素个数,及键的总数 |
3 | str(dict) 输出字典可打印的字符串表示 |
4 | type(variale) 返回输入的变量类型,如果变量是字典就返回字典类型 |
2.内置方法
序号 | 函数及描述 |
1 | dict.clear() 删除字典内所有元素 |
2 | dict.copy() 返回一个字典的浅复制 |
3 | dict.fromkev(seql,val) 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
4 | dict.get(key,default=None) 返回指定键的值,如果值不在字典中返回default值 |
5 | dict.has_key(key) 如果键在字典dict里返回true,否则返回false |
6 | dict.items() 以列表返回可遍历的(键,值)元组数组 |
7 | dict.keys() 以列表返回一个字典所有的键 |
8 | dict.setdefault(key,default=None) 和get()类似,但如果键不存在于字典中,姜会添加键并将值设为defalut |
9 | dict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | pop(key[,default]) 删除字典给定键key所对应的值,返回值为被删除的值。key值必须给出,否则,返回defalut值 |
11 | dict.popitem() 返回并删除字典中的最后一对键和值 |
12 | dict.values() 以列表返回字典中的所有值 |
三、嵌套
嵌套:将一系列字典存储在列表中,或将列表作为值存储在字典中。
1.字典列表
如何管理成群结队的外星人?
创建一个外星人列表,其中每个外星人都是字典,包含有关该外星人的各种信息
alien_0 = {'color':'green','points':5}
alien_1 = {'color':'yellow','points':10}
alien_2 = {'color':'red','points':15}
aliens = [alien_0,alien_1,alien_2]
for alien in aliens: print(alien)
代码生成每个外星人
#创建一个用于存储外星人的空列表
aliens = []
#创建30个绿色的外星人
for alien_number in range(30): new_alien = {'color':'green','points':5,'speed':'slow'} aliens.append(new_alien)
#修改前3个外星人的数据
for alien in aliens[:3]: if alien['color'] == 'green': alien['color'] = 'yellow' alien['speed'] = 'medium' alien['points'] = 10
#显示前5个外星人
for alien in aliens[:5]: print(alien)
print("...")
#显示创建了多少个外星人
print("Total number of aliens:" +str(len(aliens)))
2.在字典中 存储列表
使用情况:每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表
#存储所点披萨的信息
pizza = {'crust':'thick', #外皮类型'topping':['mushrooms','extra cheese'], #配料
}
#概述所电披萨
print("You oedered a" + pizza['crust'] + "-crust pizza" + "with the following toppings:")
for topping in pizza['topping']:print("\t"+topping)
3.在字典中存储字典
users = {'zhang3' : {'first' : 'san','last' : "zhang",'location' : 'princeton',},'li4' : {'first' : 'si','last' : "li",'location' : 'paris',}
}
for username,user_info in users.items():print("\nUsername :" + username)full_name = user_info['first'] + " " + user_info['last']location = user_info['location']print("\tFull name:" + full_name.title())print("\tlocation:" + location.title())