字典是Python语言中唯一的映射类型。
映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。字典是Python中最强大的数据类型之一。字典类型与序列类型的区别:
1.存取和访问数据的方式不同。2.序列类型只用数字类型的键(从序列的开始按数值顺序索引);3.映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同,映射类型的键直4.接或间接地和存储数据值相关联。5.映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。6.映射类型用键直接“映射”到值。Summary:
a.字典是使用大括号来创建,每组是一组键值对,使用冒号来隔开,对键的字符串做一个哈希算法,再把它存储到某一段内存空间里,查找时直接使用键来查询b.每组键值彼此之间没有位置关系,所有的数据类型都可以做为值,键要一定是唯一的,不可修改的c.不可变类型分为:整型,字符串,元组(键) 可变类型分为:列表,字典(值)
In [3]: a=10 对象一旦创建,是不会被修改的In [4]: b=aIn [5]: b=15 相当于把指向从10指向15In [6]: print(a,b)10 15In [7]: id(a)Out[7]: 9323616 存储内存地址的数字不一样In [8]: id(b)Out[8]: 9323776In [9]: b=aIn [10]: id(a)Out[10]: 9323616In [11]: id(b)Out[11]: 9323616
字典的创建
method1:In [6]: dic={'name':'tom','age':22,'hobby':'reading','cool':True}In [7]: print(dic){'name': 'tom', 'age': 22, 'hobby': 'reading', 'cool': True}In [9]: dic['name']Out[9]: 'tom'method2:In [13]: dic1=dict((('name','tom'),))In [14]: print(dic1){'name': 'tom'}值为可变的情况In [10]: dic={'name':'tom','age':22,'hobby':{'sports':'football','food':'fruit'},'cool':True}In [11]: print(dic){'name': 'tom', 'age': 22, 'hobby': {'sports': 'football', 'food': 'fruit'}, 'cool': True}In [12]: dic['hobby']Out[12]: {'food': 'fruit', 'sports': 'football'}
字典的操作
增In [1]: dic1={'name':'li'}In [2]: dic1['age']=12In [3]: dic1Out[3]: {'age': 12, 'name': 'li'}In [6]: dic1.setdefault('age','14') ##已经存在不会作出任何修改Out[6]: 12In [7]: dic1Out[7]: {'age': 12, 'name': 'li'}In [8]: dic1.setdefault('hobby','young') ##如果不存在,就是添加Out[8]: 'young'In [9]: dic1Out[9]: {'age': 12, 'hobby': 'young', 'name': 'li'}
查
In [10]: dic2={'age': 12, 'hobby': 'young', 'name': 'li'}In [11]: dic2['age']Out[11]: 12In [13]: dic2.keys() 查看所有的键Out[13]: dict_keys(['age', 'hobby', 'name'])In [14]: type(dic2.keys())Out[14]: dict_keysIn [15]: list(dic2.keys()) 作转换成列表Out[15]: ['age', 'hobby', 'name']In [16]: dic2.values() 查看所有的值Out[16]: dict_values([12, 'young', 'li'])In [17]: list(dic2.values())Out[17]: [12, 'young', 'li']In [18]: dic2.items()Out[18]: dict_items([('age', 12), ('hobby', 'young'), ('name', 'li')]) 把所有的键值对做成元组In [19]: list(dic2.items())Out[19]: [('age', 12), ('hobby', 'young'), ('name', 'li')]
改
In [20]: dic3={'age': 12, 'hobby': 'young', 'name': 'li'}In [21]: dic3['age']=14In [22]: dic3Out[22]: {'age': 14, 'hobby': 'young', 'name': 'li'}In [23]: dic4={'age': 12, 'hobby': 'young', 'name': 'li'}In [24]: dic5={'age': 999,'li':'you'}In [25]: dic4.update(dic5) #把dic5的添加到dic4中,有就更新,没有就添加In [26]: dic4Out[26]: {'age': 999, 'hobby': 'young', 'li': 'you', 'name': 'li'}In [27]: dic5Out[27]: {'age': 999, 'li': 'you'}
删
In [1]: dic5={'age': 12, 'hobby': 'young', 'name': 'li'}In [2]: del dic5['name'] 删除键值对In [3]: dic5Out[3]: {'age': 12, 'hobby': 'young'}In [4]: dic5.clear() 清空In [5]: dic5Out[5]: {}In [6]: dic5={'age': 12, 'hobby': 'young', 'name': 'li'}In [7]: dic5.pop('age') 弹出并有返回值Out[7]: 12In [8]: dic5Out[8]: {'hobby': 'young', 'name': 'li'}In [9]: dic5={'age': 12, 'hobby': 'young', 'name': 'li'}In [10]: dic5.popitem() 随机删除Out[10]: ('name', 'li')In [11]: dic5Out[11]: {'age': 12, 'hobby': 'young'}
其他操作
from.keys方法使用In [14]: dic6=dict.fromkeys(['host1','host2','host3'],'test') #后面的test作为一个整体赋值In [15]: dic6Out[15]: {'host1': 'test', 'host2': 'test', 'host3': 'test'}In [16]: dic6['host']='hostkey'In [17]: dic6Out[17]: {'host': 'hostkey', 'host1': 'test', 'host2': 'test', 'host3': 'test'}In [18]: dic6=dict.fromkeys(['host1','host2','host3'],['test1','test2']) ##后面是列表的状况In [19]: dic6Out[19]: {'host1': ['test1', 'test2'],'host2': ['test1', 'test2'],'host3': ['test1', 'test2']}In [20]: dic6['host1'][1]='test4'In [21]: dic6Out[21]: {'host1': ['test1', 'test4'], 所有的都修改'host2': ['test1', 'test4'],'host3': ['test1', 'test4']}
字典的嵌套
book={'english':{'car': ['truck','moto'],'bike': ['expensive','cheap']},'chinese':{'bus': ['big','small']}}In [2]: bookOut[2]: {'chinese': {'bus': ['big', 'small']},'english': {'bike': ['expensive', 'cheap'], 'car': ['truck', 'moto']}}In [3]: book['english']['car'][1]='test' ##修改In [4]: bookOut[4]: {'chinese': {'bus': ['big', 'small']},'english': {'bike': ['expensive', 'cheap'], 'car': ['truck', 'test']}}
排序(字典没有自带的方法)
In [5]: dic={7:'777',2:'222',5:'555'}In [6]: sorted(dic) #根据键来排序Out[6]: [2, 5, 7]In [8]: sorted(dic.values())Out[8]: ['222', '555', '777']In [9]: sorted(dic.items())Out[9]: [(2, '222'), (5, '555'), (7, '777')]
字典的遍历
In [10]: dic4={'name':'tom','age':19}In [11]: for i in dic4:...: print(i) ##遍历字典时,默认打印键nameageIn [16]: for i in dic4:...: print(i,dic4[i]) ##通过键来取值,效率高点name tomage 19In [17]: for i in dic4.items(): ##键值对,元组,有转换的过程...: print(i)('name', 'tom')('age', 19)In [18]: for i,v in dic4.items(): ##使用两个参数来接收...: print(i,v)name tomage 19