映射,字典是Python中唯一的内建的映射类型,字典中的值并没有特殊的顺序,但是都存储在一个特定的键(Key)里,
键可以是数字,字符串甚至元组
4.1 字典的使用:
加入有一个人名列表如下;
names=['Alice','Beth','Cecil','Dee-Dee','Earl']
如果要创建一个可以存储这些人的电话号码的小型数据库,应该怎么做呢?
一种方法是建立一个新的列表,假设只存储四位的分机电话号码,
那么可以得到于下面相似的列表:
numbers=['2341','9102','3158','0142','5551'];
names=['Alice','Beth','Cecil','Dee-Dee','Earl']
numbers=['2341','9102','3158','0142','5551'];
print numbers[names.index('Cecil')]
/*******************************
names=['Alice','Beth','Cecil','Dee-Dee','Earl']
numbers=['2341','9102','3158','0142','5551'];
print numbers[names.index('Cecil')]
print names[0];
print [names.index('Cecil')]
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a4.py
3158
Alice
[2]
4.2 创建和使用字典:
字典可以通过下面的方式创建:
phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
print phonebook
字典中键是唯一的
字典和列表访问方式:
字典访问方式:
phonebook={'Alice':'2341','Beth':'9102','Cecil':'3258'}
print phonebook
print phonebook['Alice']
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a4.py
{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}
2341
列表访问方式:
edward=['a1','b2','c3']
print edward[0];
print edward[1];
print edward[2];
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a5.py
a1
b2
c3
4.2.1
可以使用dict 函数,通过其他映射(比如其他字典)或者(键,值) 这样的序列对建立字典:
items=[('name','Gumby'),('age',42)]
print items
d=dict(items)
print d
print d['name']
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a4.py
[('name', 'Gumby'), ('age', 42)]
{'age': 42, 'name': 'Gumby'}
Gumby
4.2.2 基本字典操作:
字典的基本行为在很多方面与序列(sequence)类似:
items = [('name', 'Gumby'), ('age', 42), ('k', 99)]
print items
d = dict(items)
print d
print d['name']
print len(d)
print d['k']
d['h']='001'
print d
print 'k' in d
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a4.py
[('name', 'Gumby'), ('age', 42), ('k', 99)]
{'k': 99, 'age': 42, 'name': 'Gumby'}
Gumby
3
99
{'k': 99, 'age': 42, 'name': 'Gumby', 'h': '001'}
True
>>> x=[]
>>> x[42]='aa'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
字典示例:
people = {
'Alice':{
'phone':'2341',
'addr':'foo drive 23'
},
'Beth':{
'phone':'9102',
'addr':'Bar street 42'
},
'Cecil':{
'phone':'3158',
'addr':'Baz avenue 90'
}
}
print people
print people['Alice']['phone']
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a5.py
{'Beth': {'phone': '9102', 'addr': 'Bar street 42'}, 'Alice': {'phone': '2341', 'addr': 'foo drive 23'}, 'Cecil':
{'phone': '3158', 'addr': 'Baz avenue 90'}}
2341
4.2.3 字典的格式化字符串:
4.2.4 字典方法:
1. clear
clear 方法清除字典中所有的项,这个是原地操作(类似于list.sort),所以无返回值(或者说返回None)
d={}
print d
d['name']='Gumby'
d['age']=42
print d
print d.clear()
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a6.py
{}
{'age': 42, 'name': 'Gumby'}
None
为什么这个方法有用呢? 考虑一下两种的情况,下面是第一种;
第一种情况:
C:\>python
Python 2.7.10 (default, May 23 2015, 09:40:32
Type "help", "copyright", "credits" or "licen
>>> x={}
>>> y=x
>>> x['key']='vale'
>>> y
{'key': 'vale'}
>>> x
{'key': 'vale'}
>>> x={}
>>> x
{}
>>> y
{'key': 'vale'}
>>>
C:\>python
Python 2.7.10 (default, May 23 2015, 09:40:3
Type "help", "copyright", "credits" or "lice
>>> x={}
>>> y=x
>>> x['key']='value'
>>> y
{'key': 'value'}
>>> x.clear()
>>> x
{}
>>> y
{}
>>>
2.copy
copy 方法但会一个具有相同键值对的新字典(这个方法实现的是浅复制(shallow copy),
因为值本身就是相同的,而不是副本).
x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
print x
y = x.copy()
y['username'] = 'mlh'
y['machines'].remove('bar')
print y
print x
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a6.py
{'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
{'username': 'mlh', 'machines': ['foo', 'baz']}
{'username': 'admin', 'machines': ['foo', 'baz']}
可以看到,当在副本中替换值的时候,原始字典不受影响,但是,如果修改了某个值(原地修改,而不是替换),
原始的字典也会改变,因为同样的值也存储在原字典中
3. fromkeys
fromkeys 方法使用给定的键建立新的字典,每个键默认对应的值为NONE。
print dict.fromkeys(['name','age'])
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a6.py
{'age': None, 'name': None}
5. hash_key
has_key 方法可以检查字典中是否含有给出的键,表达式d.has_key(k)相当于表达式k in d.
使用哪个方式很大程序上取决于个人的喜好
items = [('name', 'Gumby'), ('age', 42), ('k', 99)]
d=dict(items)
print d
print 'k' in d
print d.has_key('k')
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a4.py
{'k': 99, 'age': 42, 'name': 'Gumby'}
True
True
6.items和iteritems 函数;
d={'title':'Python Web Site','url':'http://www.python.org','spam':0}
print d.items()
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a7.py
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]
Process finished with exit code 0
d={'title':'Python Web Site','url':'http://www.python.org','spam':0}
print d.iteritems()
print list(d.iteritems())
C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/untitled1/a7.py
<dictionary-itemiterator object at 0x0054FB70>
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]
第四章 字典
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:elk 搭建
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Python第四章-字典
第四章 字典-当索引不好用时4.0 字典可以理解成是C++里的map,可以映射任何类型。字是...
python html 键值对 -
第四章(下)
OpenCV中有多种选取区域的方法,罗列在表中。使用方法如下,其中比较值得注意的是
稀疏矩阵 #include 3d -
第四章作业
第一题第二题
其他 第四章