Python中关于字典的操作

字典是什么

在 Python 中,字典 是一系列键 — 值对 。每个键 都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何 Python 对象用作字典中的值。dictionary(字典)是除列表以外python中最灵活的数据类型

字典和列表的区别

列表是有序的对象集和
字典是无序的对象集和

字典的表示

字典用{}定义,字典使用键值对存储数据,键值对之间使用,分隔,键key是索引,值value是数据,键和值之间使用;分隔,键必须是唯一的(因为我们必须通过键来找到数据,值可以取任何数据类型,但键只能使用字符串,数字或元组,字典是一个无序的数据集和,使用print函数输出字典时, 通常输出的顺序和定义的顺序是不一致的
举例:

定义一个存储学生信息的字典
message_dict = {
'name' : 'guodong',
'age' : '21',
'sex' : 'M',
'weight' : '140',
'height' : '180'}
print message_dict

在这里插入图片描述
可以看到,控制台输出的顺序和定义的顺序是不一致的。

对字典的各种操作

1:取值,根据索引(key)取值,取值时,索引用中括号括起来

message_dict = {
'name' : 'guodong',
'age' : '21',
'sex' : 'M',
'weight' : '140',
'height' : '180'}
# 取字典中索引为name的值
print message_dict['name']

利用ipython实现:
在这里插入图片描述
2:增加/删除
增加:索引使用中括号括起来
message_dict[‘id’] = ‘05’
print message_dict
在这里插入图片描述
删除:索引使用小括号括起来
message_dict.pop(‘id’)
print message_dict
在这里插入图片描述
3:统计键值对的数量
print len(message_dict)
在这里插入图片描述
4:添加字典里面已经存在的元素,会将以前元素内容修改
message_dict[‘age’] = 22
print message_dict
在这里插入图片描述
5:合并字典,如果与原字典键值索引重复,则会被更新

sex_dict = {'sex':'man',
            'grade':4}
# 将message_dict字典与sex_dict字典合并
message_dict.update(sex_dict)
print message_dict

在这里插入图片描述

字典的遍历

遍历所有的键-值对

可以使用一个 for 循环来遍历字典

message_dict = {
'name' : 'guodong',
'age' : '21',
'sex' : 'M',
'weight' : '140',
'height' : '180'}
for key,value in message_dict.items():
	print ("key:" + key)
	print ("value:" + value)

用pycharm实现:
在这里插入图片描述

遍历字典中的所有键

在不需要使用字典中的值时,方法 keys() 很有用。下面来遍历字典favorite_languages ,并将每个被调查者的名字都打印出来:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in favorite_languages.keys():
# 打印遍历后的键,并用title方法将键的首字母变成大写
print(name.title())

在这里插入图片描述
遍历字典时,会默认遍历所有的键,因此,如果将上述代码中的 for name in favorite_languages.keys(): 替换为 for name in favorite_languages: ,输出
将不变。
如果显式地使用方法 keys() 可让代码更容易理解,你可以选择这样做,但如果你愿意,也可省略它。

按顺序遍历字典中的所有键

字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。这不是问题,因为通常你想要的只是获取与键相关联的正确的值。
要以特定的顺序返回元素,一种办法是在 for 循环中对返回的键进行排序。为此,可使用函数 sorted() 来获得按特定顺序排列的键列表的副本

favorite_languages = {
    'jen' : 'python',
    'sarah' : 'c',
    'edward' : 'ruby',
    'phil' : 'python'
}
# 使用sorted函数对字典中的键进行排序
for name in sorted(favorite_languages):
    print (name.title())

用pycharm实现:
在这里插入图片描述

遍历字典中的所有值

如果你感兴趣的主要是字典包含的值,可使用方法 values() ,它返回一个值列表,而不包含任何键。例如,如果我们想获得一个这样的列表,即其中只包含被调查者选择的各种语言,而不包含被调查者的名字,可以这样做:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("The following languages have been mentioned:")
# 使用values方法遍历字典中的所有值
for language in favorite_languages.values():
	print(language.title())

在这里插入图片描述
这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合( set )。集合 类似于列表,但每个元素都必须是独一无二的:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("The following languages have been mentioned:")
# 使用集合set剔除重复项
for language in set(favorite_languages.values()):
print(language.title())

用pycharm实现:
在这里插入图片描述

嵌套

有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套 。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。

字典与列表的嵌套

列表中存放字典
一个字典只能存储一种动物的信息,但无法存储第二种动物的信息,更别说是一群动物了,如何管理成群结队的动物呢,我们可以创建一个动物列表,其中每种动物是一个字典,包含这种动物的各种信息,我们来创建一个包含三种动物的列表:

# 定义三个动物字典
animal_01 = {'var' : 'dog','env' : 'land'}
animal_02 = {'var' : 'bird','env' : 'sky'}
animal_03 = {'var' : 'fish', 'env' : 'ocean'}
# 定义一个动物列表
animals = [animal_01,animal_02,animal_03]
# 遍历动物列表,打印出每种动物
for animal in animals:
    print animal

在这里插入图片描述
字典中存放列表
有时候,需要将列表存储在字典中,而不是将字典存储在列表中。例如,你如何描述顾客点的比萨呢?如果使用列表,只能存储要添加的比萨配料;但如果使用字典,就不仅可在其中包含配料列表,还可包含其他有关比萨的描述。
在下面的示例中,存储了比萨的两方面信息:外皮类型和配料列表。其中的配料列表是一个与键 ‘toppings’ 相关联的值。要访问该列表,我们使用字典名和键 ‘toppings’,就像访问字典中的其他值一样。这将返回一个配料列表,而不是单个值

# 存储所点比萨的信息
pizza = {
'crust': 'thick',
'toppings': ['mushrooms', 'extra cheese'], #配料列表
}
# 概述所点的比萨
print("You ordered a " + pizza['crust'] + "-crust pizza " +
"with the following toppings:")
for topping in pizza['toppings']:
	print("\t" + topping)

在这里插入图片描述

字典与字典的嵌套

可在字典中嵌套字典,但这样做时,代码可能很快复杂起来。例如,如果有多个网站用户,每个都有独特的用户名,可在字典中将用户名作为键,然后将每位用户的信息存储在一个字典中,并将该字典作为与用户名相关联的值。在下面的程序中,对于每位用户,我们都存储了其三项信息:名、姓和居住地;为访问这些信息,我们遍历所有的用户名,并访问与每个用户名相关联的信息字典:

users = {
'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton',
},
'mcurie': {
'first': 'marie',
'last': 'curie',
'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())

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/gd0306/article/details/84260107