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

  

 

posted @ 2018-02-21 22:17  Reid21  阅读(125)  评论(0)    收藏  举报