在Python中使用dictionary

2020-03-11  本文已影响0人  醉看红尘这场梦

创建dictionary

首先,来看如何创建dictionary,我们用{key:value}这样的形式直接指定值就好了:

empty = {}
user = {"email": "11@boxue.io", "workId": 11}

这样,我们就创建了一个空的和一个包含两个key的dictionary。实际上,和tuple类似,我们还可以使用dict关键字来创建dictionary:

empty = dict()
user = dict({"email": "11@boxue.io", "workId": 11})

但是,hmm.. 我是觉得没什么必要这样,大家只要选择一种自己习惯的方法,一直用下去也就是了。

访问dictionary中的元素

创建好dictionary之后,就可以访问它的内容了。形式上和list类似,只不过我们获取value的索引不再是位置,而是要访问的key:

user = dict({"email": "11@boxue.io", "workId": 11})
print(user['email'])
# 11@boxue.io

但是,和其他语言不同的是,在Python里,访问一个不存在的Key是不合法的行为,会导致运行时错误,例如:

print(user['address'])

'''
Traceback (most recent call last):
  File "/Users/puretears/Desktop/tmp/CollectionsTypes/CollectionTypes.py", line 6, in <module>
    print(user['address'])
KeyError: 'address'
'''

更新dictionary

实际上,除了用上面的方式访问dictionary中的元素外,还可以直接修改对应的key:

user['email'] = '10@boxue.io'

这时,如果我们给一个不存在的key赋值,就相当于给dictionary添加新元素:

user['address'] = "Beijing xxxxx"

这样,当我们再访问user['address']的时候,就不会再有运行时错误了。除了使用下标操作符之外,我们还可以使用update方法:

user.update({'address': 'Beijing xxxxxx'})

使用update的一个好处就是,当我们需要给dictionary添加多个key-value的时候,会比较方便。当我们要添加或者更新一个key的时候,还是坚持使用下标操作符的版本就好了。

删除dictionary中的元素

和之前讲过的两种集合类型一样,我们也可以使用del函数直接删除dictionary中的元素:

del(user['address'])

或者,删掉整个dictionary:

del(user)

无论是删掉的元素还是dictionary,再访问它们的时候,就会发生运行时错误。如果,你只是想清空dictionary,可以使用clear方法:

user.clear()

这样,user对象还在,只不过所有的key-value都没有了。

了解Key类型的限制

在Python里,尽管我们可以让任何类型的对象作为dictionary中的value,但key并不如此。它有两个限制:

user = dict({"email": "11@boxue.io", "workId": 11, "workId": 10})
print(user)
# {'email': '11@boxue.io', 'workId': 10}

虽然,从打印的结果来看,会采用相同key的最后一个value,但是,不要在dictionary的定义中使用相同的Key。

user = dict({"email": "11@boxue.io", "workId": 11, (11, 1101): "Floor&Room"})
# This works

user = dict({"email": "11@boxue.io", "workId": 11, [11, 1101]: "Floor&Room"})
# This is wrong

'''
Traceback (most recent call last):
  File "/Users/puretears/Desktop/tmp/CollectionsTypes/CollectionTypes.py", line 4, in <module>
    user = dict({"email": "11@boxue.io", "workId": 11, [11, 1101]: "Floor&Room"})
TypeError: unhashable type: 'list'
'''

其它常用的dictionary操作

除了我们之前介绍过的集合类型操作之外,dictionary基于它自身的特性,还有一些属于它自己的方法:

首先,是单独获取dictionary的所有keys和values,它们的类型,都是list:

user = dict({"email": "11@boxue.io", "workId": 11})
print(user.keys())
# dict_keys(['email', 'workId'])
print(user.values())
# dict_values(['11@boxue.io', 11])

其次,判断dictionary中是否包含某个key:

print("email" in user)
# True

当然,我们也可以这样:

print("email" in user.keys())
# True

虽然得到的结果是一样的,但是,在Python 3中,应该坚持使用第一种方式判断dictionary是否包含某个key,它比第二种方法要快的多。就像我们刚才提到的,Python 3中的keys()返回的是一个dict_keys对象。当我们使用in操作符的时候,处理dictionary,要比处理dict_keys对象更快。

上一篇下一篇

猜你喜欢

热点阅读