字典
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中
dict = {key1 : value1, key2 : value2 }
字典的特性:键必须是唯一的,但值则不必唯一。
【1】定义
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
字典实例:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'} dict2 = { 'abc': 123, 98.6: 37 };
【2】访问字典的值
使用 obj[key] 的形式
dict = { 'name': 'hugo', 'age': 18, 'position': 'webFont' } print(dict['name']) #hugo print(dict['age']) #18 print(dict['position']) #webFont
假如字典里没有的键访问数据,会输出错误:
dict = { 'name': 'hugo', 'age': 18, 'position': 'webFont' } print(dict['work'])
报错如下:
File "/Users/hugo/Desktop/test/test.py", line 6, in <module> print(dict['work']) KeyError: 'work'
【3】修改字典
dict = { 'name': 'hugo', 'age': 18, 'position': 'webFont' } dict['age'] = 20 print(dict) #{'name': 'hugo', 'age': 20, 'position': 'webFont'}
【4】增加字典的键和值
假如字典中有这个键和这个键所对应的值,则是对字典键所对应的值的修改;假如字典中没有这个键和这个键所对应的值,则是对字典添加键值对
dict = { 'name': 'hugo', 'age': 18, 'position': 'webFont' } #这个是修改 dict['age'] = 20 #这个是添加键值对 dict['sex'] = 'man' print(dict)
#{'name': 'hugo', 'age': 20, 'position': 'webFont', 'sex': 'man'}
【5】删除字典元素
dict = { 'name': 'hugo', 'age': 18, 'position': 'webFont' } #删除键 'name' del dict['name'] print(dict) #{'age': 18, 'position': 'webFont'} #清空字典 dict.clear() print(dict) #{} #删除字典 del dict print(dict) #<class 'dict'>
在字典的内置函数中会介绍到其它删除方法
【6】字典的特性
键必须是唯一的,但值则不必唯一。
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例
dict = {'Name': 'Runoob', 'Age': 7, 'Name': '小菜鸟'} print (dict['Name']) #小菜鸟
2)键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行,如下实例:
dict = {['Name']: 'Runoob', 'Age': 7} print ("dict['Name']: ", dict['Name'])
报错如下:
Traceback (most recent call last): File "/Users/hugo/Desktop/test/ss.py", line 1, in <module> dict = {['Name']: 'Runoob', 'Age': 7} TypeError: unhashable type: 'list'
【7】字典的嵌套
cities={ '北京':{ '朝阳':['国贸','CBD','天阶','我爱我家','链接地产'], '海淀':['圆明园','苏州街','中关村','北京大学'], '昌平':['沙河','南口','小汤山',], '怀柔':['桃花','梅花','大山'], '密云':['密云A','密云B','密云C'] }, '河北':{ '石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'], '张家口':['张家口A','张家口B','张家口C'], '承德':['承德A','承德B','承德C','承德D'] } }
【8】字典的内置函数
序号 | 函数及描述 | 实例 |
---|---|---|
1 | len(dict) 计算字典元素个数,即键的总数。 |
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> len(dict)
3
|
2 | str(dict) 输出字典,以可打印的字符串表示。 |
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> str(dict)
"{'Name': 'Runoob', 'Class': 'First', 'Age': 7}"
|
3 | type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。 |
>>> dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
>>> type(dict)
<class 'dict'>
|
【9】字典的内置方法:
- clear() 删除字典内所有元素
dict = { 'name': 'hugo', 'age': 18, 'position': 'webFont' } dict.clear() print(dict) #{}
- copy() 返回一个字典的浅复制
dict = { 'name': 'hugo', 'age': 18, 'position': 'webFont' } dict1 = dict.copy() print(dict1) #{'name': 'hugo', 'age': 18, 'position': 'webFont'}
关于字典的深浅拷贝的理解,点击此
- fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值,返回列表
语法如下
dict.fromkeys(seq[, value]))
参数:
seq--字典值列表
value--可选参数,设置键序列(seq)的值
seq = ('name', 'age', 'sex') dict = dict.fromkeys(seq) print ("新的字典为 : %s" % str(dict)) #新的字典为 : {'name': None, 'age': None, 'sex': None} dict = dict.fromkeys(seq, 10) print ("新的字典为 : %s" % str(dict)) #新的字典为 : {'name': 10, 'age': 10, 'sex': 10}
- get() 返回指定键的值,如果值不在字典中返回default值
语法和例子如下:
dict.get(key, default=None) 参数: key-- 字典中要查找的键 default -- 如果指定键的值不存在时,返回该默认值值。
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } print(dict.get('age')) # 10 print(dict.get('position')) #web print(dict.get('Sex',"man")) #man
- in 操作符用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。
语法和例子如下:
key in dict 参数: key-- 要在字典中查找的键。
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } print('name' in dict) # True print('sex' in dict) # False
- items() 方法以列表返回可遍历的(键, 值) 元组数组
语法和例子如下:
dict.items()
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } print(dict.items()) #dict_items([('name', 'hugo'), ('age', 18), ('position', 'web')])
- keys() 方法以列表返回一个字典所有的键。
语法和例子如下:
dict.keys()
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } print(dict.keys()) #dict_keys(['name', 'age', 'position'])
- setdefault() 方法和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值
语法和例子如下:
dict.setdefault(key, default=None) 参数 key -- 查找的键值。 default -- 键不存在时,设置的默认键值。
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } print(dict.setdefault('age', None)) #18 print(dict.setdefault('sex', None)) #None print(dict) #{'name': 'hugo', 'age': 18, 'position': 'web', 'sex': None}
- update() 函数把字典dict2的键/值对更新到dict里。
语法和例子如下:
dict.update(dict2)
参数:
dict2 -- 添加到指定字典dict里的字典。
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } dict2= { 'sex': 'man' } dict.update(dict2) print(dict) #{'name': 'hugo', 'age': 18, 'position': 'web', 'sex': 'man'}
- values() 方法以列表返回字典中的所有值。
语法和例子如下:
dict.values()
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } print(dict.values()) #dict_values(['hugo', 18, 'web'])
- pop() 方法删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
语法和例子如下:
pop(key[,default])
参数
key: 要删除的键值
default: 如果没有 key,返回 default 值
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } print(dict.pop('name')) #hugo print(dict) #{'age': 18, 'position': 'web'} print(dict.pop('sex','man')) #man print(dict) #{'age': 18, 'position': 'web'}
- popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } print(dict.popitem()) #('position', 'web') print(dict) #{'name': 'hugo', 'age': 18}
【10】遍历
通过for ... in ...:的语法结构,我们可以遍历字符串、列表、元组、字典等数据结构。
1、字符串的遍历
aString = "hello world" for char in aString: print(char, end= " ") #h e l l o w o r l d
2、列表的遍历
aList = [1, 2, 3, 4, 5] for num in aList: print(num,end=' ') #1 2 3 4 5
3、元祖的遍历
aTurple = (1,2,3,4,5) for num in aTurple: print(num, end=" ") #1 2 3 4 5
【11】字典的遍历
1、遍历字典的键(key)
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } for key in dict.keys(): print(key) #name #age #position
2、遍历字典的值(value)
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } for val in dict.values(): print(val) #hugo #18 #web
3、遍历字典的项
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } for item in dict.items(): print(item) #('name', 'hugo') #('age', 18) #('position', 'web')
4、遍历字典的key-value (键值对)
dict = { 'name': 'hugo', 'age': 18, 'position': 'web' } for key,value in dict.items(): print("key=%s,value=%s"%(key,value)) #key=name,value=hugo #key=age,value=18 #key=position,value=web