python筆記四-字典
1、當索引不好用時候,使用字典。
2、字典的定義:
>>> phonebook = {'Alice':'2341','Beth':'9102','Ceil':'3258'}
>>> PHONEBOOK
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
PHONEBOOK
NameError: name 'PHONEBOOK' is not defined
>>> phonebook
{'Beth': '9102', 'Alice': '2341', 'Ceil': '3258'}
>>>
3、使用dict函式將序列建立字典
>>> items = [('name','Gumby'),('age',42)]
>>> d=dict(items)
>>> d
{'age': 42, 'name': 'Gumby'}
>>> d['name']
'Gumby'
刪除字典的 鍵,使用 del d[key], 檢測d中是否有key的鍵,使用 key in d,來判斷成員資格
4、建立一個空的字典,符號是{}, 而不是[],建立之後可以直接新增鍵值,如下:
>>> x = []
>>> x[42] = 'Foobar'
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
x[42] = 'Foobar'
IndexError: list assignment index out of range
>>> x = {}
>>> x[42] = 'Foobar'
>>> x
{42: 'Foobar'}
5、利用字典格式化字串,格式: “%(key)s” % d
>>> phonebook
{'Beth': '9102', 'Alice': '2341', 'Ceil': '3258'}
>>> "Ceil's phone number is %(Ceil)s." % phonebook
"Ceil's phone number is 3258."
>>> "Beth: %(Beth)s" % phonebook
'Beth: 9102'
6、字典方法
(1)clear。將清除原始字典的所有鍵值
>>> x = {}
>>> x['1'] = 'aaa'
>>> y = x
>>> y
{'1': 'aaa'}
>>> y.clear()
>>> y
{}
>>> x
{}
如果要求只清除x,而保留y的內容,可以執行x={},
(2)copy。執行淺複製
>>> x={'1':'aaa','2':['xx','yy','zz']}
>>> y = x.copy()
>>> y
{'1': 'aaa', '2': ['xx', 'yy', 'zz']}
>>> y['1'] = '111'
>>> x
{'1': 'aaa', '2': ['xx', 'yy', 'zz']}
>>> y
{'1': '111', '2': ['xx', 'yy', 'zz']}
注意:x的鍵值'1'沒有改變,但是對y執行以下操作,x的內容發生了變化
>>> y
{'1': '111', '2': ['xx', 'yy', 'zz']}
>>> y['2'].remove('xx')
>>> y
{'1': '111', '2': ['yy', 'zz']}
>>> x
{'1': 'aaa', '2': ['yy', 'zz']}
注意:x鍵值'2'在執行remove之後發生了變化,x被修改了,為了達到複製之後相互獨立的效果,深複製可以解決以上問題
>>> from copy import deepcopy
>>> d = {}
>>> d['111'] = ['aaa','bbb']
>>> c = d.copy()
>>> dc = deepcopy(d)
>>> d['111'].append('ccc')
>>> c
{'111': ['aaa', 'bbb', 'ccc']}
>>> dc
{'111': ['aaa', 'bbb']}
說明:c會隨著d而修改,而dc 則不受影響。
(3)fromkeys 函式,構建字典鍵值
>>> {}.fromkeys(['key1','key2'])
{'key2': None, 'key1': None}
說明:以上通過空字典建立二對鍵值(鍵值列表為key1和key2),預設值為‘None’
>>> dict.fromkeys(['k1','k2','k3','k4'])
{'k4': None, 'k1': None, 'k3': None, 'k2': None}
說明:呼叫了dict的fromkeys函式
>>> dict.fromkeys(['key1','key2','key3','key4'],'unknown')
{'key1': 'unknown', 'key2': 'unknown', 'key4': 'unknown', 'key3': 'unknown'}
說明:預設值改為了‘unknown’
(4)get方法。可以安全訪問字典中不存在的鍵值,一般常規下根據索引去訪問鍵值會發生異常,而用get方法不會
>>> d = {}
>>> d['a']
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
d['a']
KeyError: 'a'
>>> d.get('a')
>>> print(d.get('a'))
None
>>>
也可以提供預設輸出值
>>> d.get('a','N/A')
'N/A'
正常訪問存在的鍵值,如下
>>> d['a'] = 'aaaaa'
>>> d.get(['a'])
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
d.get(['a'])
TypeError: unhashable type: 'list'
>>> d.get('a')
'aaaaa'
(5)has_key方法。用來檢查字典中是否存在某鍵key,但是python3.x不包括這個函式
>>> d
{'a': 'aaaaa'}
>>> d.has_key('a')
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
d.has_key('a')
AttributeError: 'dict' object has no attribute 'has_key'
可以用in來判斷
>>> 'a' in d
True
>>> 'b' in d
False
(6)items和iteritmes,python3.x不支援iteritems,
>>> d = {'1':'aaa', '2':'bbb','3':'ccc','4':'ddd'}
>>> d.items
<built-in method items of dict object at 0x02D8AB20>
>>> d.items()
dict_items([('4', 'ddd'), ('3', 'ccc'), ('2', 'bbb'), ('1', 'aaa')])
>>> it = d.iteritems()
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
it = d.iteritems()
AttributeError: 'dict' object has no attribute 'iteritems'
>>> it = d.items
>>> list(it)
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
list(it)
TypeError: 'builtin_function_or_method' object is not iterable
(7)keys和iterkeys,python3.x不支援iterkeys
>>> d
{'4': 'ddd', '3': 'ccc', '2': 'bbb', '1': 'aaa'}
>>> d.keys
<built-in method keys of dict object at 0x02D8AB20>
>>> d.keys()
dict_keys(['4', '3', '2', '1'])
(8)pop彈出鍵值(返回值後從字典中刪除)
>>> d
{'4': 'ddd', '3': 'ccc', '2': 'bbb', '1': 'aaa'}
>>> d.pop('1')
'aaa'
>>> d
{'4': 'ddd', '3': 'ccc', '2': 'bbb'}
(9)popitem隨機彈出鍵值
>>> d
{'4': 'ddd', '3': 'ccc', '2': 'bbb'}
>>> d.popitem()
('4', 'ddd')
>>> d
{'3': 'ccc', '2': 'bbb'}
(10)setdefault,當鍵不存在,使用預設值設定鍵對應的值,如果存在鍵,忽略setdefault操作,均返回當前鍵對應的值
>>> d
{'3': 'ccc', '2': 'bbb'}
>>> d.setdefault('5','N/A')
'N/A'
>>> d
{'5': 'N/A', '3': 'ccc', '2': 'bbb'}
>>> d.setdefault('2','N/A')
'bbb'
>>> d
{'5': 'N/A', '3': 'ccc', '2': 'bbb'}
(11)update。用新字典的鍵值替換舊字典的鍵值
>>> d
{'5': 'N/A', '3': 'ccc', '2': 'bbb'}
>>> d1 = {'5':'eee'}
>>> d.update(d1)
>>> d
{'5': 'eee', '3': 'ccc', '2': 'bbb'}
(12)values和 itervalues
>>> d
{'5': 'eee', '3': 'ccc', '2': 'bbb'}
>>> d.values
<built-in method values of dict object at 0x02D8AB20>
>>> d.values()
dict_values(['eee', 'ccc', 'bbb'])
python3不支援value迭代器
>>> itv = d.values
>>> list(itv)
Traceback (most recent call last):
File "<pyshell#41>", line 1, in <module>
list(itv)
TypeError: 'builtin_function_or_method' object is not iterable
>>> itv = d.itervalues
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
itv = d.itervalues
AttributeError: 'dict' object has no attribute 'itervalues'
>>> itv = d.itervalues()
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
itv = d.itervalues()
AttributeError: 'dict' object has no attribute 'itervalues'