Python 中的字典

Python 中的字典就是一系列的键值对集合,与键相关联的值可以是数字、字符串、列表乃至字典等一切元素,我们可将任何 Python 对象用作字典中的值

在 Python 中,用方括号({ })来表示列表,键和值之间用冒号分隔,而键值对之间用逗号分隔,如下所示:

python_dist = {"one": 1, "two": 2}

(注:你可以理解 Pyhton 中的字典为 Java 的 Map)

访问字典中的元素

我们可以通过字典中的键去获取对应值:

python_dist = {"name": "小明", "age": 17}
print(python_dist["age"])
# >>> 17

但是如果获取一个不存在的键值对,就会运行出错:

在这里插入图片描述

因此当我们无法确定键值对是否存在时,可以这么判断一下:

python_dist = {"name": "小明", "age": 17}
if "age" in python_dist.keys():
    print(python_dist["age"])
if "t" in python_dist.keys():
    print(python_dist["t"])
# >>> 17

方法 keys() 返回的是一个键元素的列表,包含着字典中的所有键元素,我们可以通过它来判断某个键元素是否在字典中存在

操作字典中的元素

我们的字段已有元素不一定可以满足需求,那么这时候就需要往字典中插入新的元素:

python_dist = {"name": "小明", "age": 17}
python_dist["birthday"] = "2019-01-20"
print(python_dist)
# >>> {'name': '小明', 'age': 17, 'birthday': '2019-01-20'}

然后我们发现字典中某个数据是错误的,比方说这里的小明的年纪并不是 17 岁,没关系,我们修改一下字典中的值元素即可:

python_dist = {"name": "小明", "age": 17, "birthday": "2019-01-20"}
python_dist["age"] = 16
print(python_dist)
# >>> {'name': '小明', 'age': 16, 'birthday': '2019-01-20'}

这时候小明找到我们,他不希望别人知道他的具体生日,这个简单,我们就如小明所愿将它的生日数据从字典中删除:

python_dist = {"name": "小明", "age": 17, "birthday": "2019-01-20"}
print("原字典:%s" %python_dist)
del python_dist["birthday"]
print("删除后:%s" % python_dist)
# >>> 原字典:{'name': '小明', 'age': 17, 'birthday': '2019-01-20'}
# >>> 删除后:{'name': '小明', 'age': 17}

遍历字典

Python 支持遍历字典并打印出全部的键值对,对于遍历字典的 for 循环,可声明两个变量,用于存储键值对中的键和值:

python_dist = {"name": "小明", "age": 17, "birthday": "2019-01-20"}
for key, value in python_dist.items():
    # 这里将默认的换行替换为 , 
    print("key is %s" % key, end=",")
    print("value is %s" % value)
# >>> key is name,value is 小明
# >>> key is age,value is 17
# >>> key is birthday,value is 2019-01-20

如果不需要知道字典中的值元素,可以只遍历字典中的键元素:

python_dist = {"name": "小明", "age": 17, "birthday": "2019-01-20"}
for key in python_dist.keys():
    print("key is %s" % key)
# >>> key is name
# >>> key is age
# >>> key is birthday

方法 keys() 上面已经提过了,那么如果我们需要遍历里面的值元素呢?这时候轮到了 values() 方法了:

python_dist = {"name": "小明", "age": 17, "birthday": "2019-01-20"}
for value in python_dist.values():
    print("value is %s" % value)
# >>> value is 小明
# >>> value is 17
# >>> value is 2019-01-20

keys() 和 values() 都是返回一个列表,因此如果我们需要对输出有顺序的字典元素,就可以使用 sorted() 和 sort() 进行排序了

字典的嵌套

我们发现一个字典可以存储一个人物的基本信息,那么有多个人物呢?就很自然想到了列表了:

python_dist_0 = {"name": "小明", "age": 17, "birthday": "2019-01-20"}
python_dist_1 = {"name": "小黄", "age": 18, "birthday": "2018-01-21"}
python_dist_2 = {"name": "小月", "age": 20, "birthday": "2017-01-20"}
python_list = [python_dist_0, python_dist_1, python_dist_2]
for item in python_list:
    print(item)
# >>> {'name': '小明', 'age': 17, 'birthday': '2019-01-20'}
# >>> {'name': '小黄', 'age': 18, 'birthday': '2018-01-21'}
# >>> {'name': '小月', 'age': 20, 'birthday': '2017-01-20'}

列表可以用来存储字典,那么是否可以反过来呢?我们知道,三人行必有我师,人的一生肯定有许多老师的:

python_dist = {"name": "小明", "age": 17, "teacher": ["数学老师", "语文老师", "英语老师"]}
for item in python_dist["teacher"]:
    print(item)
# >>> 数学老师
# >>> 语文老师
# >>> 英语老师

列表和字典都可以互相嵌套,那么字典与字典呢?自然也是可以,但是数据结构也会相对复杂不少:

python_dist_0 = {"name": "小明", "age": 17, "birthday": "2019-01-20"}
python_dist_1 = {"name": "小黄", "age": 18, "birthday": "2018-01-21"}
python_person = {0: python_dist_0, 1: python_dist_1}
for key, value in python_person.items():
    print("key is %s" % key)
    print("value is %s" % value)
# >>> key is 0
# >>> value is {'name': '小明', 'age': 17, 'birthday': '2019-01-20'}
# >>> key is 1
# >>> value is {'name': '小黄', 'age': 18, 'birthday': '2018-01-21'}

你可能感兴趣的:(Python)