Python字典
1、使用字典:
-
在Python中,字典 是一系列键—值对
-
每个键 都与一个值相关联,你可以使用键来访问与之相关联的值
-
与键相关联的值可以是
数字、字符串、列表乃至字典
-
可将
任何Python对象
用作字典中的值
-
在Python中,字典用放在
花括号{} 中的一系列键—值对表示
-
举个简单示例:
data = {'name': 'fe_cow', 'age': 18} print(data) # 输出结果:{u'age': 18, u'name': u'fe_cow'}
-
键—值 对是两个相关联的值。
-
指定键时,Python将返回与之相关联的值
。 -
键和值之间用冒号分隔,而键—值对之间用逗号分隔
。 -
最简单的字典只有一对键值:
data = {'name': 'fe_cow'}
- 'name’就是键,'fe_cow’就是值
-
2、访问字典中的值:
-
要获取与
键相关联的值
,可依次指定字典名
和放在方括号内的键
data = {'name': 'fe_cow', 'age': 18} print(data['name']) print(data['age']) # 输出结果如下: fe_cow 18
2.1、添加键—值对:
-
字典是一种
动态结构
,可随时在其中添加键—值对
-
要添加键—值对,可依次指定
字典名、用方括号括起的键和相关联的值
data = {'name': 'fe_cow', 'age': 18} data['email'] = '280773872@qq.com'# 在字典中新增加了一个键值对,键'email'值'280773872@qq.com' data['QQ'] = '280773872' print(data) # 输出结果: {u'QQ': u'280773872', u'age': 18, u'name': u'fe_cow', u'email': u'280773872@qq.com'}
- 注意,键—值对的排列顺序与添加顺序不同。Python不关心键—值对的添加顺序,而只关心键和值之间的关联关系。所以说字典是无序的。
2.2、先创建一个空字典:
-
使用一对空的
花括号定义一个字典
,再分行添加各个键—值对, 也可以dict()
data = {} data['name'] = 'fe_cow' data['age'] = 18 print(data) # 或者使用: data = dict() data['name'] = 'fe_cow' data['age'] = 18 print(data) # 输出结果都是:{u'age': 18, u'name': u'fe_cow'} # 但是每对键值对顺序是不一样的
2.3、修改字典中的值:
-
指定
字典名、用方括号括起的键以及与该键相关联的新值
data = {'name': 'fe_cow', 'age': 18} data['name'] = 'cow' data['age'] = 20 print(data) # 输出结果:{u'age': 20, u'name': u'cow'}
2.4、删除键值对:
-
使用
del 语句将相应的键—值对彻底删除
。使用del 语句时,必须指定字典名和要删除的键
data = {'name': 'fe_cow', 'age': 18} del data['name'] print(data) # 输出结果如下: {u'age': 18}
- 注意:删除的键—值对永远消失了。
2.5、类似对象组成的字典:
-
字典存储的是一个对象,的多种信息
favorite_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'ruby', 'phil': 'python' }
- 我们将一个较大的字典放在了多行中。其中每个键都是一个被调查者的名字,而每个值都是被调查者喜欢的语言。
3、遍历字典:
- 一个Python字典可能只包含几个键—值对,也可能包含数百万个键—值对。鉴于字典可能包含大量的数据,
Python支持对字典遍历
。字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典的所有键—值对、键或值。
3.1、遍历所有的键—值对:
-
各种遍历方法前, 先看一个新字典,存储一名用户的的用户信息:
data = {'name': 'fe_cow', 'age': 18, 'city': 'BJ'} print(data) # 输出结果:{u'city': u'BJ', u'age': 18, u'name': u'fe_cow'}
-
可以访问
data
的任何一组信息, 但如果要获取该字典中所有的信息怎么办?可以使用一个for循环
来遍历这个字典:data = {'name': 'fe_cow', 'age': 18, 'city': 'BJ'} for key, value in data.items(): print('key:{}'.format(key)) print('value:{}'.format(value)) # 输出结果如下: key:city value:BJ key:age value:18 key:name value:fe_cow
- 要编写用于
遍历的for循环, 可以生命两个变量,一个存储键,一个存储值
- for语句的第二个部分包含
字典名
和方法items()
, 它返回一个键一个值对列表- 接下来for 循环依次将每个键-值对存储到指定的两个变量中。
- 要编写用于
-
3.2、遍历字典中的所有键:
-
在不需要使用字典中的值时,
方法keys()
很有用data = {'name': 'fe_cow', 'age': 18, 'city': 'BJ'} for key in data.keys(): # 代码让Python 提取字典中所有的键,并依次存储到变量key 中 print('key:{}'.format(key)) # 输出结果如下: key:city key:age key:name
-
再遍历字典时, 会
默认
遍历所有的键, 因此不加keys(),也可以遍历出所有的键, 只是keys()
方法会让代码更容易理解。data = {'name': 'fe_cow', 'age': 18, 'city': 'BJ'} for key in data: print('key:{}'.format(key)) # 输出结果如下: key:city key:age key:name
-
3.3、按顺序遍历字典中的所有键:
-
要以特定的顺序返回元素,一种办法是在
for 循环中
对返回的键进行排序
。 -
为此,可使用
函数sorted()
来获得按特定顺序排列的键列表的副本
data = {'name': 'fe_cow', 'age': 18, 'city': 'BJ'} for key in sorted(data.keys()): print(key) # 输出结果如下: age city name
- 这条for语句类似其他for语句, 但对方法
data.keys()
的结果调用了函数sorted()
,这让python 列出字典中所有的键, 并在遍历前对这个列表进行排序。
- 这条for语句类似其他for语句, 但对方法
3.4、遍历字典中所有的值:
-
如果想获取字典包含的值, 可使用方法
values()
,它返回一个值列表
,而不包含任何键
data = {'name': 'fe_cow', 'age': 18, 'city': 'BJ', 'class': 18} for value in data.values(): print(value) # 输出结果如下: BJ 18 fe_cow 18
-
这种做法提取字典中所有的值,而
没有考虑是否重复
-
为剔除重复项,可
使用集合(set)
,集合 类似于列表,但每个元素都必须是独一无二的.data = {'name': 'fe_cow', 'age': 18, 'city': 'BJ', 'class': 18} for value in set(data.values()): print(value) # 输出结果如下: fe_cow 18 BJ
-
4、嵌套:
- 有时候,需要将一系列
字典存储在列表中
,或将列表作为值存储在字典中
,这称为嵌套 - 你可以在
列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典
4.1、字典列表:
dict_01 = {'name': 'fe_cow', 'age': 18}
dict_02 = {'name': 'fe', 'age': 17}
dict_03 = {'name': 'cow', 'age': 19}
for item in [dict_01, dict_02, dict_03]:
print(item)
# 输出结果如下:
{u'age': 18, u'name': u'fe_cow'}
{u'age': 17, u'name': u'fe'}
{u'age': 19, u'name': u'cow'}
-
首先创建了三个字典, 把这三个字典放到了一个列表里,然后遍历这个列表
my_list = [] # 首先创建一个空列表 for item in range(0, 30): # 循环30次 new_dict = {'color': 'red', 'speed': 10, 'points': 5} # 创建一个字典 my_list.append(new_dict) # 把30次的字典加入列表中 for item in my_list[:3]: # 截取列表前三个字典 if item['color'] == 'red': # 如果字典中的键['color'] == 'red' 的时候 item['color'] = 'blue' # 将blue 赋值给 color item['speed'] = 20 # 同理 item['points'] = 30 # 同理 for item in my_list[:5]: # 截取5个的时候, 前三个是赋值给这个字典中的值 print(item) # 输出结果如下: {u'color': u'blue', u'points': 30, u'speed': 20} {u'color': u'blue', u'points': 30, u'speed': 20} {u'color': u'blue', u'points': 30, u'speed': 20} {u'color': u'red', u'points': 5, u'speed': 10} {u'color': u'red', u'points': 5, u'speed': 10}
4.2、再字典中存储列表:
-
列表存储在字典中,而不是将字典存储在列表
data = {'age': 18, 'name': ['fe_cow', 'cu_cow']} for item in data['name']: print(item) # 输出结果如下: fe_cow cu_cow
- 首先我们创建了一个字典, 字典中包含两个键, 一个是年龄,相对应的值是18岁,还有一个键是’name’,说明两个人的年龄都是18岁,‘name’ 对应的值是一个列表,‘fe_cow’,‘cu_cow’, 我们for 循环的时候,首先指定了字典中键名是’name’的,然后循环它里面所对应的列表值就是’fe_cow’,‘cu_cow’
-
每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表
favorite_languages = { 'jen': ['python', 'ruby'], 'sarah': ['c'], 'edward': ['ruby', 'go'], 'phil': ['python', 'haskell'], } for k, v in favorite_languages.items(): print('\nk:{}'.format(k)) print('\nv:{}'.format(v)) for item in v: print('\nitem:{}'.format(item)) # 输出结果如下: k:sarah v:[u'c'] item:c k:edward v:[u'ruby', u'go'] item:ruby item:go k:jen v:[u'python', u'ruby'] item:python item:ruby k:phil v:[u'python', u'haskell'] item:python item:haskell
- 注意 :列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多,很可能有更简单的解决问题的方案
4.3、再字典中存储字典:
my_dict = {
'fe_cow': {
'first_name': 'fe',
'last_name': 'cow',
'age': 18
},
'cu_cow': {
'first_name': 'cu',
'last_name': 'cow',
'age': 16
}
}
for k, v in my_dict.items():
print(k)
print(v)
# 输出结果如下:
k:fe_cow
v:{u'first_name': u'fe', u'last_name': u'cow', u'age': 18}
k:cu_cow
v:{u'first_name': u'cu', u'last_name': u'cow', u'age': 16}