转自:http://www.byhy.net/tut/py/basic/17/
字典的定义
字典对象定义用花括号 {}
, 字典里面的 每个元素之间用 逗号
隔开。
每个元素都是一个键值对,键和值之间用 冒号
隔开。
上面例子中,如果每个帐号的信息比较简单,比如只有等级信息,就定义成这样
members = {
'account1' : 13 ,
'account2' : 12
}
上面的字典对象 键就是帐号,值就是一个数字对象,表示等级的数字。
注意,字典元素的 键
必须是 可进行哈希值计算 的对象, 通常是 数字 或者 字符串。
而 字典元素的 值
可以是任何类型的 对象,包括 数字、字符串、列表、元组、字典、自定义类型 等等均可。
什么是 哈希值计算? 大家可以大体理解为 一种算法,可以根据一个原始数据,计算出一个结果数据,而且不同的原始数据,哪怕只有一丁点的不同,计算出的结果数据都不同。
上例中,用户账号信息,如果复杂一些,包括 等级、点卡数,可以是这样的
members = {
'account1' : {'account':'account1', 'level': 13, 'point':3000} ,
'account2' : {'account':'account2', 'level': 12, 'point':36000}
}
上面的字典对象 键就是帐号,值也是一个字典对象。 这个值字典对象中又 包含了 帐号、等级、积分信息。
字典对象的一个特点就是 : 根据 键 去查找 值
非常的方便高效,
比如 members['account1']
就可以得到 键为 ‘account1’ 的 元素的值
members = {
'account1' : 13 ,
'account2' : 12
}
print(members['account1'])
最后一句代码打印出的结果就是 13
字典对象可以存储非常多的元素。理论上 只要内存够大,字典的元素的数量是没有限制的。
字典对象 存储元素有特别的优化, 根据 键 查找值的效率非常高,速度非常快,特别适合查找数据这样的操作。
字典对象的键是唯一的,不可能有两个元素具有相同的键。如果我们这样定义一个字典对象
members = {
'account1' : 13 ,
'account1' : 12
}
print(members)
就会发现输出的结果是
{'account1': 12}
相同的键,后面的元素会替换前面的元素。
根据键去获取值,是这样的语法 var[key]
。
如果给出的 key
在 var
这个字典中不存在就会报错了。
比如
members = {
'account1' : 13 ,
'account2' : 12
}
print(members['account99'])
就会出现这样的错误,说明key不存在
KeyError: 'account99'
添加、修改、删除
像列表对象一样,字典对象的内容是 可以改变 的。
我们可以这样定义一个空字典
members = {}
要在字典对象中添加元素非常简单,像这样
members['account1'] = 13
members 的内容就变成了
{
'account1' : 13
}
继续添加元素
members['account2'] = 12
members 的内容就变成了
{
'account1' : 13 ,
'account2' : 12
}
如果我们要修改一个元素key对应的value为另外的值,也是这样
members['account2'] = 88
members 的内容就变成了
{
'account1' : 13 ,
'account2' : 88
}
大家可以发现:
像这样的赋值语句
var[key] = something
括号里面的key:
-
如果在字典中不存在,就是添加元素的的操作,
-
如果已经存在,就是重新赋值操作。 因为字典不允许有相同的key
如果我们要删除一个元素,可以使用字典对象的pop方法。 像这样
members = {
'account1' : 13 ,
'account2' : 12
}
val = members.pop('account1')
print(members)
print(val)
pop方法还会返回参数 key
对应的 value
对象,所以上面的代码执行后,变量val 的值就是 13
而members 的内容则变成了
members = {
'account2' : 12
}
也可以使用 del 关键字来删除一个元素,比如
del members['account1']
判断字典是否存在某个key
有时候,我们要检查字典的key中,是否有我们要找的元素,可以通过 in 这个关键字 ,比如
a in var # 检查 a 是否在var 中存在,存在返回True,否则返回False
而 not in 则判断是否不存在,比如
a not in var # 检查 a 是否不在var 中,存在返回 False,否则返回 True
具体的例子如下:
members = {
'account1' : 13 ,
'account2' : 12
}
if 'account1' in members:
print('account1 在字典中存在')
if 'account88' not in members:
print('account88 不在字典中')
访问字典的所有元素
我们有时需要访问字典的每一个元素,也叫遍历字典。
比如,我们需要打印出下面 会员信息字典 中的 每个会员的等级。怎么办?
通常我们使用字典对象的items方法,像这样:
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}
for account,level in members.items():
print (f'account:{account}, level:{level}')
items方法,返回的是一个类似列表一样的对象,其中每个元素就是 键值组成的元组
上面的字典,其items方法返回的是类似这样的对象
[('account1', 13), ('account2', 12), ('account3', 15)]
用for 循环, account level 两个变量就依次对应其中的每个元组里面的 两个元素,完成遍历。
其他常用方法
得到所有的 key 和value 对象
前面我们介绍了 items
方法, 返回的是 将字典 所有的 键值对元组 存入的 一个类似列表的对象
比如:
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}
members.items()
返回的是类似这样的对象
[('account1', 13), ('account2', 12), ('account3', 15)]
而字典还有 keys
方法, 返回的是 将字典 所有的 键
存入的 一个类似列表的对象
比如:
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}
members.keys()
返回的是类似这样的对象
['account1', 'account2', 'account3']
而字典还有 values
方法, 返回的是 将字典 所有的 值
存入的 一个类似列表的对象
比如:
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}
members.values()
返回的是类似这样的对象
[13, 12, 15]
清空字典
clear 方法可以清空字典对象里面的所有元素
比如
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}
members.clear()
print(members)
可能有的朋友就想,我们给字典对象重新赋值不也就等于清空字典吗?
比如
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}
members = {}
print(members)
这两种做法,虽然最后 members 变量指向的对象 都是一个空字典。 但是最大的区别就在于
clear方法, members 变量 指向的还是原来的字典对象。
而 重新赋值的方法, members 变量 指向的 就是一个新的空字典对象。 原来的字典对象呢? 因为没有被引用,就会被Python解释器在合适的时候 从内存中清除掉。
和另外一个字典合并
有的时候,我们需要把字典里面加上另外一个字典的内容, 可以使用update方法,比如
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}
another = {
'account4' : 13 ,
'account5' : 12 ,
}
members.update(another)
print(members)
这样,就在 members字典里面加上了 another字典里面的所有元素。
得到字典元素的个数
如果需要得到字典元素的个数,就使用Python的内置函数 len 即可
比如
members = {
'account1' : 13 ,
'account2' : 12 ,
'account3' : 15 ,
}
print(len(members)) # 结果为3,表示字典中有3个元素
网友评论