012、字典
本文最后更新于 258 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

字典

字典是一种由键值对组成的数据结构。

顾名思义,我们把键想象成字典中的单词,值想象成词对应的定义,那么一个词可以对应一个或者多个定义,但是这些定义只能通过这个词来进行查询。

基本操作

空字典可以使用{}或者dict()来创建一个空的字典:

a = {}
type(a)
dict
a = dict()
type(a)
dict

有了dict之后,可以用索引键值的方法向其中添加元素,也可以通过索引来查看元素的值。

插入键值:

a["one"] = "this is number 1"
a["two"] = "this is number 2"
a
{'one': 'this is number 1', 'two': 'this is number 2'}

查看键值:

a['one']
'this is number 1'

更新键值:

a["one"] = "this is number 1, too"
a
{'one': 'this is number 1, too', 'two': 'this is number 2'}

初始化字典

可以看到,Python使用key: value这样的结构来表示字典中的元素结构,事实上,可以直接使用这样的结构来初始化一个字典:

b = {'one': 'this is number 1', 'two': 'this is number 2'}
b['one']
'this is number 1'
print(a)
{'one': 'this is number 1, too', 'two': 'this is number 2'}

字典没有顺序

Python中不能用支持用数字索引按顺序查看字典中的值,而且数字本身也有可能成为键值,这样会引起混淆:

a[0]
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

Input In [13], in ()
----> 1 a[0]

KeyError: 0

键必须是不可变的类型

字典是一种高效的存储结构,其内部使用基于哈希值的算法,用来保证从字典中读取键值对的效率。不过,哈希值算法要求字典的键必须是一种不可变类型。使用可变类型作为键时,Python会抛出异常,例如:

a[[1, 2]] = 1
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

Input In [14], in ()
----> 1 a[[1, 2]] = 1

TypeError: unhashable type: 'list'

适合做键的类型

在不可变类型中,整数和字符串是字典中最常用的类型;而浮点数通常不推荐用来做键,原因如下:

data = {}
data[1.1 + 2.2] = 6.6
data[3.3]
---------------------------------------------------------------------------

KeyError                                  Traceback (most recent call last)

Input In [17], in ()
----> 1 data[3.3]

KeyError: 3.3

这个错误是由浮点数的精度问题所引起的:

data
{3.3000000000000003: 6.6}

也可以使用元组作为键值,例如,可以用元组做键来表示从第一个城市飞往第二个城市航班数的多少:

connections = {}
connections[('New York', 'Seattle')] = 100
connections[('Austin', 'New York')] = 200
connections[('New York', 'Austin')] = 400

元组是有序的,因此 ('New York', 'Austin') 和 ('Austin', 'New York') 是两个不同的键:

connections[('Austin', 'New York')]
200
connections[('New York', 'Austin')]
400

字典方法

.get()方法替代索引处理值不存在的情况:

a = {}
a["one"] = "this is number 1"
a["two"] = "this is number 2"

值不存在时,get方法返回一个默认值,不指定时,该默认值为None

a.get("three")

传入默认值:

a.get("three", "undefined")
'undefined'

存在时,与调用索引相同:

a.get("one")
'this is number 1'

与列表一样,del 函数可以用来删除字典中特定的键值对,例如:

del a["one"]

.update()方法可以更新键值对:

person = {}
person['first'] = "Jmes"
person['last'] = "Maxwell"
person['born'] = 1831
person
{'first': 'Jmes', 'last': 'Maxwell', 'born': 1831}
person_modifications = {'first': 'James', 'middle': 'Clerk'}
person.update(person_modifications)
person
{'first': 'James', 'last': 'Maxwell', 'born': 1831, 'middle': 'Clerk'}

in查询字典中是否有该键:

barn = {'cows': 1, 'dogs': 5, 'cats': 3}
'chickens' in barn
False
'cows' in barn
True

.keys()values()items()方法分别返回字典的键,值,键值对:

barn.keys()
dict_keys(['cows', 'dogs', 'cats'])
barn.values()
dict_values([1, 5, 3])
barn.items()
dict_items([('cows', 1), ('dogs', 5), ('cats', 3)])

.setdefault()方法接受两个参数:key和default,如果key在字典中,返回其对应的值,如果不存在,则先用default的值对key进行插入,并返回default。其中default的值可以省略,默认值为None:

barn.setdefault("chickens", 4)
4
barn
{'cows': 1, 'dogs': 5, 'cats': 3, 'chickens': 4}
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇