Python攻克之路-字典
字典是Python语言中唯一的映射类型。
映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。
字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型。
字典是Python中最强大的数据类型之一。
字典类型与序列类型的区别:
1.存取和访问数据的方式不同。
2.序列类型只用数字类型的键(从序列的开始按数值顺序索引);
3.映射类型可以用其他对象类型作键(如:数字、字符串、元祖,一般用字符串作键),和序列类型的键不同,映射类型的键直4.接或间接地和存储数据值相关联。
5.映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排列的。
6.映射类型用键直接“映射”到值。
Summary:
a.字典是使用大括号来创建,每组是一组键值对,使用冒号来隔开,对键的字符串做一个哈希算法,再把它存储到某一段内存空间里,查找时直接使用键来查询
b.每组键值彼此之间没有位置关系,所有的数据类型都可以做为值,键要一定是唯一的,不可修改的
c.不可变类型分为:整型,字符串,元组(键)
可变类型分为:列表,字典(值)

In [3]: a=10 对象一旦创建,是不会被修改的 In [4]: b=a In [5]: b=15 相当于把指向从10指向15 In [6]: print(a,b) 10 15 In [7]: id(a) Out[7]: 9323616 存储内存地址的数字不一样 In [8]: id(b) Out[8]: 9323776 In [9]: b=a In [10]: id(a) Out[10]: 9323616 In [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']=12
In [3]: dic1
Out[3]: {'age': 12, 'name': 'li'}
In [6]: dic1.setdefault('age','14') ##已经存在不会作出任何修改
Out[6]: 12
In [7]: dic1
Out[7]: {'age': 12, 'name': 'li'}
In [8]: dic1.setdefault('hobby','young') ##如果不存在,就是添加
Out[8]: 'young'
In [9]: dic1
Out[9]: {'age': 12, 'hobby': 'young', 'name': 'li'}
查
In [10]: dic2={'age': 12, 'hobby': 'young', 'name': 'li'}
In [11]: dic2['age']
Out[11]: 12
In [13]: dic2.keys() 查看所有的键
Out[13]: dict_keys(['age', 'hobby', 'name'])
In [14]: type(dic2.keys())
Out[14]: dict_keys
In [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']=14
In [22]: dic3
Out[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]: dic4
Out[26]: {'age': 999, 'hobby': 'young', 'li': 'you', 'name': 'li'}
In [27]: dic5
Out[27]: {'age': 999, 'li': 'you'}
删
In [1]: dic5={'age': 12, 'hobby': 'young', 'name': 'li'}
In [2]: del dic5['name'] 删除键值对
In [3]: dic5
Out[3]: {'age': 12, 'hobby': 'young'}
In [4]: dic5.clear() 清空
In [5]: dic5
Out[5]: {}
In [6]: dic5={'age': 12, 'hobby': 'young', 'name': 'li'}
In [7]: dic5.pop('age') 弹出并有返回值
Out[7]: 12
In [8]: dic5
Out[8]: {'hobby': 'young', 'name': 'li'}
In [9]: dic5={'age': 12, 'hobby': 'young', 'name': 'li'}
In [10]: dic5.popitem() 随机删除
Out[10]: ('name', 'li')
In [11]: dic5
Out[11]: {'age': 12, 'hobby': 'young'}
其他操作
from.keys方法使用
In [14]: dic6=dict.fromkeys(['host1','host2','host3'],'test') #后面的test作为一个整体赋值
In [15]: dic6
Out[15]: {'host1': 'test', 'host2': 'test', 'host3': 'test'}
In [16]: dic6['host']='hostkey'
In [17]: dic6
Out[17]: {'host': 'hostkey', 'host1': 'test', 'host2': 'test', 'host3': 'test'}
In [18]: dic6=dict.fromkeys(['host1','host2','host3'],['test1','test2']) ##后面是列表的状况
In [19]: dic6
Out[19]:
{'host1': ['test1', 'test2'],
'host2': ['test1', 'test2'],
'host3': ['test1', 'test2']}
In [20]: dic6['host1'][1]='test4'
In [21]: dic6
Out[21]:
{'host1': ['test1', 'test4'], 所有的都修改
'host2': ['test1', 'test4'],
'host3': ['test1', 'test4']}
字典的嵌套
book={
'english':{
'car': ['truck','moto'],
'bike': ['expensive','cheap']
},
'chinese':{
'bus': ['big','small']
}
}
In [2]: book
Out[2]:
{'chinese': {'bus': ['big', 'small']},
'english': {'bike': ['expensive', 'cheap'], 'car': ['truck', 'moto']}}
In [3]: book['english']['car'][1]='test' ##修改
In [4]: book
Out[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) ##遍历字典时,默认打印键
name
age
In [16]: for i in dic4:
...: print(i,dic4[i]) ##通过键来取值,效率高点
name tom
age 19
In [17]: for i in dic4.items(): ##键值对,元组,有转换的过程
...: print(i)
('name', 'tom')
('age', 19)
In [18]: for i,v in dic4.items(): ##使用两个参数来接收
...: print(i,v)
name tom
age 19

浙公网安备 33010602011771号