学习:字典

转自: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]

如果给出的 keyvar 这个字典中不存在就会报错了。

比如

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个元素

你可能感兴趣的:(学习:字典)