映射中的每个元素都有一个专业的名字,叫做键。字典是Python中唯一内建的映射类型,下来我们对其进行详细介绍:
(1)键类型
字典(dict)是一个存放无序的键值映射(key/value)类型数据的容器字典的键可以是数
字、字符串或者是元组,键必须唯一。在Python中,数字、字符串和元组都被设计成不可变类型,而 常见的列表以及集合(set)都是可变的,所以列表和集合不能作为字典的键。键可以为任何不可变类型,这正是Python中的字典最强大的地方。
(2)创建
>>> d = {2:"二",3:'san'}
>>> type(d)
<type 'dict'>
>>> d[1] = 1
>>> d
{1: 1, 2: '\xb6\xfe', 3: 'san'}
>>> d = {}
>>> d[1] = 1
>>> d
{1: 1}
>>> d['cat'] = 'Lucy'
>>> d
{1: 1, 'cat': 'Lucy'}
dict3 = dict([("name","kitty"),("age",18)]) #利用dict函数将列表转换成字典
dict4 = dict(name='kitty',age=18) #利用dict函数通过关键字参数转换为字典
dict5 = {}.fromkeys(["name","age"]) #利用fromkeys函数将key值列表生成字典,对应的值为None {'age': None, 'name': None}
(3)查找
dict是通过key来查找value,表示的是意义对应的关系,可以通过d[key]的方式来访问dict:
>>> d['cat']
'Lucy'
(4)遍历
>>> d = {}
>>> d['cat'] = 'Lucy'
>>> d['dog'] = 'Ben'
>>> for key in d:
print(key + ":",d[key])
结果
cat: Lucy
dog: Ben
(5)修改与删除
>>> d = {2:"二",3:'san'}
>>> type(d)
<type 'dict'>
>>> d[1] = 1
>>> d
{1: 1, 2: '\xb6\xfe', 3: 'san'}
>>> d[2]='er'
>>> d
{1: 1, 2: 'er', 3: 'san'}
>>> d.pop(1)
1
>>> d
{2: 'er', 3: 'san'}
(6)获取字典相关操作
>>> [x for x in dir({}) if not x.startswith("__")]#查看字典的所有公共方法
['clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
#【添加元素】
dict1 = {}
dict1["mykey"] = "hello world" #直接给一个不存在的键值对赋值 即时添加新元素
dict1[('my','key')] = "this key is a tuple" #字典的键可以是任何一中不可变类型,例如数字、字符串、元组等
#【键值对个数】
print len(dict1)
#【检查是否含有键】
print "mykey" in dict1 #True 检查是否含有键为mykey的键值对
print "hello" in dict1 #False
#【删除】
注:
dict.clear() 删除字典中所有元素
dict.copy() 返回字典(浅复制)的一个副本
dict.get(key,default=None) 对字典dict 中的键key,返回它对应的值value,如果字典中不存在此键,则返回default 的值(注意,参数default 的默认值为None)
dict.has_key(key) 如果键(key)在字典中存在,返回True,否则返回False. 在Python2.2版本引入in 和not in 后,此方法几乎已废弃不用了,但仍提供一个 可工作的接口。
dict.items() 返回一个包含字典中(键, 值)对元组的列表
dict.keys() 返回一个包含字典中键的列表
dict.values() 返回一个包含字典中所有值的列表
dict.iter() 方法iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代器,而不是一个列表。
dict.pop(key[, default]) 和方法get()相似,如果字典中key 键存在,删除并返回dict[key],如果key 键不存在,且没有给出default 的值,引发KeyError 异常。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值
(7)比较字典
当比较列表的时候,如果项的顺序是不完全相同,python会认为这些列表不同。对字典不是来说,不是这样。
>>> d1={1:1,2:2,3:3}
>>> d2={1:1,3:3,2:2}
>>> d1==d2
True
(8)优缺点
dict的第一个特点是查找速度快,而且查找的速度与元素的个数无关,而list的查找速度是随着元素的增加而逐渐下降的;第二个特点是 存储的key-value序对是没有顺序的;第三个特点是作为key得到元素是不可变的,所以list不能作为key。
dict的缺点是占用内存大,还会浪费很多内容。
(1)键类型
字典(dict)是一个存放无序的键值映射(key/value)类型数据的容器字典的键可以是数
字、字符串或者是元组,键必须唯一。在Python中,数字、字符串和元组都被设计成不可变类型,而 常见的列表以及集合(set)都是可变的,所以列表和集合不能作为字典的键。键可以为任何不可变类型,这正是Python中的字典最强大的地方。
(2)创建
>>> d = {2:"二",3:'san'}
>>> type(d)
<type 'dict'>
>>> d[1] = 1
>>> d
{1: 1, 2: '\xb6\xfe', 3: 'san'}
>>> d = {}
>>> d[1] = 1
>>> d
{1: 1}
>>> d['cat'] = 'Lucy'
>>> d
{1: 1, 'cat': 'Lucy'}
dict3 = dict([("name","kitty"),("age",18)]) #利用dict函数将列表转换成字典
dict4 = dict(name='kitty',age=18) #利用dict函数通过关键字参数转换为字典
dict5 = {}.fromkeys(["name","age"]) #利用fromkeys函数将key值列表生成字典,对应的值为None {'age': None, 'name': None}
(3)查找
dict是通过key来查找value,表示的是意义对应的关系,可以通过d[key]的方式来访问dict:
>>> d['cat']
'Lucy'
(4)遍历
>>> d = {}
>>> d['cat'] = 'Lucy'
>>> d['dog'] = 'Ben'
>>> for key in d:
print(key + ":",d[key])
结果
cat: Lucy
dog: Ben
(5)修改与删除
>>> d = {2:"二",3:'san'}
>>> type(d)
<type 'dict'>
>>> d[1] = 1
>>> d
{1: 1, 2: '\xb6\xfe', 3: 'san'}
>>> d[2]='er'
>>> d
{1: 1, 2: 'er', 3: 'san'}
>>> d.pop(1)
1
>>> d
{2: 'er', 3: 'san'}
(6)获取字典相关操作
>>> [x for x in dir({}) if not x.startswith("__")]#查看字典的所有公共方法
['clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
#【添加元素】
dict1 = {}
dict1["mykey"] = "hello world" #直接给一个不存在的键值对赋值 即时添加新元素
dict1[('my','key')] = "this key is a tuple" #字典的键可以是任何一中不可变类型,例如数字、字符串、元组等
#【键值对个数】
print len(dict1)
#【检查是否含有键】
print "mykey" in dict1 #True 检查是否含有键为mykey的键值对
print "hello" in dict1 #False
#【删除】
注:
dict.clear() 删除字典中所有元素
dict.copy() 返回字典(浅复制)的一个副本
dict.get(key,default=None) 对字典dict 中的键key,返回它对应的值value,如果字典中不存在此键,则返回default 的值(注意,参数default 的默认值为None)
dict.has_key(key) 如果键(key)在字典中存在,返回True,否则返回False. 在Python2.2版本引入in 和not in 后,此方法几乎已废弃不用了,但仍提供一个 可工作的接口。
dict.items() 返回一个包含字典中(键, 值)对元组的列表
dict.keys() 返回一个包含字典中键的列表
dict.values() 返回一个包含字典中所有值的列表
dict.iter() 方法iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代器,而不是一个列表。
dict.pop(key[, default]) 和方法get()相似,如果字典中key 键存在,删除并返回dict[key],如果key 键不存在,且没有给出default 的值,引发KeyError 异常。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。
dict.setdefault(key,default=None) 和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值
(7)比较字典
当比较列表的时候,如果项的顺序是不完全相同,python会认为这些列表不同。对字典不是来说,不是这样。
>>> d1={1:1,2:2,3:3}
>>> d2={1:1,3:3,2:2}
>>> d1==d2
True
(8)优缺点
dict的第一个特点是查找速度快,而且查找的速度与元素的个数无关,而list的查找速度是随着元素的增加而逐渐下降的;第二个特点是 存储的key-value序对是没有顺序的;第三个特点是作为key得到元素是不可变的,所以list不能作为key。
dict的缺点是占用内存大,还会浪费很多内容。