Python数据类型-6 字典

Posted sakura579

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据类型-6 字典相关的知识,希望对你有一定的参考价值。

字典

Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值的类型也可以是其它任何数据类型!

字典的key必须是不可变的对象,例如整数、字符串、bytes和元组,但使用最多的还是字符串。 列表、字典、集合等就不可以作为key。同时,同一个字典内的key必须是唯一的,但值则不必。

字典可精确描述为不定长、可变、无序、散列的集合类型

字典的每个键值对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,例如:

d = {key1 : value1, key2 : value2 }

创建字典
dict()函数是Python内置的创建字典的方法。

test = {}  		# 创建空字典
test = {"a":\'123\',\'b\':\'2\',"c":3}
dict([(\'name\', \'juran\'), (\'age\', 18), (\'addr\', \'cs\')])
{\'name\': \'juran\', \'age\': 18, \'addr\': \'cs\'}

dict(a=1, b=2, jack=4098)
{\'a\':1,\'b\':2}

访问字典
字典是集合类型,不是序列类型,因此没有索引下标的概念,更没有切片的说法。但是,与list类似,字典采用把相应的键放入方括号内获取对应值的方式取值。

dic = {\'Name\': \'json\',\'Age\': 18}
print ("dic[\'Name\']: ", dic[\'Name\'])
print ("dic[\'Age\']: ", dic[\'Age\'])
如果访问字典里没有的键,会抛出异常:
dic[\'address\']
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    dic["address"]
KeyError: \'address\'

增加和修改
增加就是往字典插入新的键值对,修改就是给原有的键赋予新的值。由于一个key只能对应一个值,所以,多次对一个key赋值,后面的值会把前面的值冲掉。

dic = {\'Name\': \'json\',\'Age\': 18}
dic["address"] = "beijing"
dic["address"] = "Shanghai"
dic["Age"] = 20
dic
{\'Name\': \'json\', \'Age\': 20, \'address\': \'Shanghai\'}
-------------------------------------
要统计字典内键的个数,可以使用Python内置的len()函数:
len(dic)
3

删除字典元素、清空字典和删除字典
使用del关键字删除字典元素或者字典本身,使用字典的clear()方法清空字典

dic
{\'Name\': \'json\', \'Age\': 20, \'address\': \'Shanghai\'}
del dic[\'Name\']     # 删除指定的键
dic
{\'Age\': 20, \'address\': \'Shanghai\'}
-------------------------------------
a = dic.pop(\'Age\')       # 弹出并返回指定的键。必须提供参数!

20
dic.clear()		  # 清空字典
del dic           # 删除字典本身

字典的重要方法

get(key) 	返回指定键的值,如果值不在字典中,则返回default值
items() 	以列表返回可遍历的(键, 值) 元组对
keys() 	以列表返回字典所有的键
values() 	以列表返回字典所有的值

接下来我们看看例子:

dic = {\'Name\': \'json\', \'Age\': 20, \'address\': \'Shanghai\'}
dic.get("sex")			# 访问不存在的key,没有报错
dic[\'sex\']              # 访问不存在的key,报错。
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    dic["sex"]
KeyError: \'sex\'
-------------------------------------
dic.items()
dict_items([(\'Name\', \'json\'), (\'Age\', 20), (\'address\', \'Shanghai\')])
-------------------------------------
dic.values()
dict_values([\'json\', 20, \'Shanghai\'])
-------------------------------------
dic.keys()
dict_keys([\'Name\', \'Age\', \'address\'])
-------------------------------------
dic.pop(\'Name\')
json

遍历字典
从Python3.6开始遍历字典获得的键值对是有序的

dic = {\'Name\': \'Jack\', \'Age\': 7, \'Class\': \'First\'}

1  直接遍历字典获取键,根据键取值
for key in dic:
    print(key, dic[key])

2  利用items方法获取键值,速度很慢,少用!
for key,value in dic.items():
    print(key,value)

3  利用keys方法获取键
for key in dic.keys():
    print(key, dic[key])

4  利用values方法获取值,但无法获取对应的键。
for value in dic.values():
    print(value) 

以上是关于Python数据类型-6 字典的主要内容,如果未能解决你的问题,请参考以下文章

python的6种基本数据类型--字典

Python代码阅读(第19篇):合并多个字典

python数据类型之字典

Python snippet(代码片段)

Python代码阅读(第26篇):将列表映射成字典

《Python从小白到大牛》第6章 数据类型