给妹子讲python-S01E02学会用字典

简介: 字典和列表完全不同,字典里的对象是无序的,他是通过一对对的键和值来反映一种映射关系。字典里,每个键都是唯一的,我们可以通过键来存取对应的值,而不能像列表那样通过位置来索引。

【妹子说】上次讲了列表,今天接着讲讲字典吧。

首先我要说,字典这个容器类型真的非常好用,也非常重要。

字典和列表完全不同,字典里的对象是无序的,他是通过一对对的键和值来反映一种映射关系。字典里,每个键都是唯一的,我们可以通过键来存取对应的值,而不能像列表那样通过位置来索引。

首先来看看怎样用最简单的方法生成一个字典,先弄一个出来再说。

D = {
'name':{'first':'Bob', 'last':'Smith'},
'job' : ['dev','mgr'],
'age' : 0.5,
'addr': 'BeiJing'
}
print(D)

{'job': ['dev', 'mgr'], 'addr': 'BeiJing', 'name': {'first': 'Bob', 'last': 'Smith'}, 'age': 0.5}

从这个例子的输出结果我们可以看出,字典也是可以包含任意的数据类型,即所谓的异构性,甚至可以嵌套一个字典,同时从打印的结果看,字典里的各个元素确实没有什么顺序可言。

对字典值的读取和修改也很简单

D = {'food':'spam', 'quality':4, 'color': 'pink'}
print(D['food'])
D['sex'] = 'gender'
print(D)

spam
{'food': 'spam', 'color': 'pink', 'quality': 4, 'sex': 'gender'}

我们用‘food’键就可以读取其对应的值---字符串对象‘spam’,此外我们还可以原地增加‘sex’键以及对应的值,当然,也可以原地修改其他已有的键和值。

【妹子问】恩,可是我觉得这种方法很死板呀,他要求我们一个一个的把数据手动输入来构建字典,这样子感觉不是很方便呢

这个问题问的太好了。特别是当我们事先不知道字典有哪些键和值的时候,如果想利用在程序中动态获取的数据集来生成字典,上述方法就办不到了。

基于这种需求,我们再介绍其他几个生成字典的方法:

第一种方法:初始为空字典,动态填充新的键和值

D = {}
D['name'] = 'Bob'
D['job'] = 'dev'
print(D)

{'name': 'Bob', 'job': 'dev'}

重点是第二种方法,用列表动态生成字典。

一般来说字典的键是事先约定好的,比如姓名、性别、生日等等,而值往往是要在程序运行过程当中通过用户输入、网页数据抓取等不同手段动态获取的。本方法可以在获取值列表后动态生成一个字典。

key_list = ['a','b','c']
value_list = [11,22,33]
D = dict(zip(key_list, value_list))
print(D)

{'a': 11, 'c': 33, 'b': 22}

第三种方法,用键值对元组组成的列表构造字典。(元组我们后面要讲,就是这个圆括号)

D = dict([('aa',11),('bb',22),('cc',33)])
print(D)

{'cc': 33, 'aa': 11, 'bb': 22}

【妹子问】哦,有了这些好用的方法我就放心啦。还有一个问题:如果我有两个已经生成的字典,想要把他们合并应该怎么做呢?

做法很简单

D1 = {'a':1,'b':2, 'c':3}
D2 = {'c':8, 'd':9}
D1.update(D2)
print(D1)

{'c': 8, 'b': 2, 'a': 1, 'd': 9}

不过要注意,如果这两个字典中有冲突的键,那么会无规律的进行覆盖,所以应该避免这种情况

【妹子说】现在我明白在不同使用场景下如何来生成一个字典了,那我如果访问一个不存在的字典键,应该会报错吧

这么说也对,也不对。

我们具体看看对于键不存在这种情况下的处理技巧。

D = {'a':1,'b':2, 'c':3}
print(D['d'])

Traceback (most recent call last):
 File "E:/12homework/12homework.py", line 2, in <module>
print(D['d'])
KeyError: 'd'

用这种直接访问的方式,如果键不存在就会报错,但是可以引入in判断方法进行避免

D = {'a':1, 'b':2}
print('c' in D)
if not 'c' in D:
print('missing')

False
Missing

其实,有一种更高级的方法实现了上述的判断功能。那就是get方法,get方法中第二个参数指的是键不存在时指定返回的默认值,如果不设置这个值,则返回None

D = {'a':11,'b':22, 'c':33}
print(D.get('d',0))

0

【妹子又问了】我们在实际使用字典时,很多情况下不应该这么一个一个的手动访问字典键吧,比如我想一次性获取所有的键,应该怎么做?

这又是一个好问题,

我们可以用下面的方法来一次性获取包含所有键的列表:

D = {'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}
print(list(D.keys()))

['b', 'a', 'd', 'e', 'c']

D.Keys方法返回的是一个迭代器,而不是直接就给出一个列表,关于迭代器后面会专门讲的,这里只需记住此处将迭代器作为参数来初始化一个list,可以一次性生成所有的键,并将其打印出来。

想获取值的列表,处理方法也十分类似

D = {'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}
print(list(D.values()))

[11, 33, 44, 55, 22]

我们还可以用同样类似的方法同时获取键值对的列表

D = {'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}
print(list(D.items()))

[('d', 44), ('a', 11), ('c', 33), ('e', 55), ('b', 22)]

【妹子说】和列表相类比,下面是不是也得说说字典的删除和排序问题?

对,字典和列表大同小异。而且删除也是利用del和pop两种方法

D = {'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}
del D['a']
print(D)

{'b': 22, 'c': 33, 'e': 55, 'd': 44}

pop方法是在删除指定键对应的元素的同时,返回这个键所对应的值

D = {'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}
print(D.pop('a'))
print(D)

11
{'b': 22, 'e': 55, 'd': 44, 'c': 33}

【妹子反问我了】我记得你最开始的时候说,在字典里对象是无序的呀,那怎么还存在排序的概念呢?

原来是挖坑在等我呀,字典的排序操作实际上是在对键进行排序,他返回一个排好序的键的列表

D = {'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}
print(sorted(D))
print(sorted(D.keys()))

['a', 'b', 'c', 'd', 'e']
['a', 'b', 'c', 'd', 'e']

这里埋一个伏笔,内置函数sorted接受的都是可迭代对象,这个反复出现的概念后面我们一定会好好谈谈。

原文发布时间为:2018-07-19
本文作者:酱油哥
本文来自云栖社区合作伙伴“Python爱好者社区”,了解相关信息可以关注“Python爱好者社区

相关文章
|
16天前
|
存储 开发者 Python
Python中的collections模块与UserDict:用户自定义字典详解
【4月更文挑战第2天】在Python中,`collections.UserDict`是用于创建自定义字典行为的基类,它提供了一个可扩展的接口。通过继承`UserDict`,可以轻松添加或修改字典功能,如在`__init__`和`__setitem__`等方法中插入自定义逻辑。使用`UserDict`有助于保持代码可读性和可维护性,而不是直接继承内置的`dict`。例如,可以创建一个`LoggingDict`类,在设置键值对时记录操作。这样,开发者可以根据具体需求定制字典行为,同时保持对字典内部管理的抽象。
|
1月前
|
存储 索引 Python
python字典:怎么取出key对应的值
python字典:怎么取出key对应的值
35 0
C4.
|
1月前
|
存储 Python
Python的字典
Python的字典
C4.
16 0
|
1月前
|
存储 数据库 索引
Python新手常见问题一:列表、元组、集合、字典区别是什么?
本文针对Python编程新手常遇到的问题,详细阐述了列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary)这四种数据结构的核心区别。列表是一种有序且可变的数据序列,允许元素重复;元组同样有序但不可变,其内容一旦创建就不能修改;集合是无序、不重复的元素集,强调唯一性,主要用于数学意义上的集合操作;而字典则是键值对的映射容器,其中键必须唯一,而值可以任意,它提供了一种通过键查找对应值的有效方式。通过对这些基本概念和特性的对比讲解,旨在帮助初学者更好地理解并运用这些数据类型来解决实际编程问题。
37 1
|
7天前
|
安全 Python
python字典的内置方法
Python字典主要方法包括:`keys()`(返回所有键)、`values()`(返回所有值)、`items()`(返回所有键值对)、`get()`(安全取值,键不存在时返回默认值)、`setdefault()`(设置默认值)、`update()`(合并字典)、`pop()`(删除并返回值)、`clear()`(清空字典)、`copy()`(浅拷贝)、`fromkeys()`(新建字典并设置默认值)、`popitem()`(随机删除键值对)。
8 0
|
16天前
|
存储 Java 程序员
【Python】6. 基础语法(4) -- 列表+元组+字典篇
【Python】6. 基础语法(4) -- 列表+元组+字典篇
39 1
|
16天前
|
存储 Python
python基础篇: 详解 Python 字典类型内置方法
python基础篇: 详解 Python 字典类型内置方法
25 1
|
21天前
|
C语言 Python
Python字典推导式:高效构建字典的利器
在Python编程中,字典推导式(Dictionary Comprehension)是一种强大的构造工具,它允许我们以简洁的方式从现有可迭代对象创建新的字典。通过字典推导式,我们可以轻松地对数据进行转换、过滤或重新组织,以符合特定的需求。本文将深入探讨字典推导式的概念、语法和应用场景,帮助读者更好地掌握这一高效的编程工具。
|
27天前
|
Python
深入解析Python中的字典推导式
深入解析Python中的字典推导式
|
1月前
|
存储 Java Python
助你更好的理解 Python 字典
助你更好的理解 Python 字典

热门文章

最新文章