Python第四章-字典
生活随笔
收集整理的這篇文章主要介紹了
Python第四章-字典
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
第四章 字典-當(dāng)索引不好用時
4.0 ?
? 字典可以理解成是C++里的map,可以映射任何類型。字典這種結(jié)構(gòu)類型稱為映射(mapping)。
{
? ?>>> phonebook = {'Alice':'2345' ,'Beth':'9102' ,'Cecil':'3258'}
? ?>>> phonebook['Alice']
? ?'2345'
? ?>>> phonebool['asd']
? ?Traceback (most recent call last):
? ?File "<pyshell#2>", line 1, in <module>
? ?phonebool['asd']
? ?NameError: name 'phonebool' is not defined
}
4.2.1 dict函數(shù)
? ? 可以通過dict函數(shù),通過其他映射(比如其他字典)或者(鍵,值)這樣的序列對建立字典。
? ? ? >>> items = [('name' ,'Gumby') ,('age' ,42)]
? ? ? >>> d = dict(items)
? ? ? >>> d
? ? ? {'name': 'Gumby', 'age': 42}
? ? ? >>> d['name']
? ? ? 'Gumby'
? ? dict函數(shù)也可以通過關(guān)鍵字參數(shù)來創(chuàng)建字典
? ? ?>>> d = dict(name='Gumby' ,age=42)
>>> d
{'name': 'Gumby', 'age': 42}
4.2.2 基本字典操作
? ? ? ?len(d)
? d[k]
? d[k]= v
? k in d ?k是鍵不是值
? 鍵類型:其他不可變類型
4.2.3 格式化字符 ?
phonebook = {\
'Beth' : '9102' ,'Alice' : '2341' ,'Cecil' : '3258'\
}
"Cecil's phone number is %(Cecil)s." % phonebook
{
??>>> template = '''<html>
??<head><title>%(title)s</title></head>
??<body>
??<hl>%(title)s</hl>
??<p>%(text)s</p>
??</body>'''
??>>> data = {'title':'Mu Home Page' ,'text':'Welcome to my home page!'}
??>>> print (template % data)
??<html>
??<head><title>Mu Home Page</title></head>
??<body>
??<hl>Mu Home Page</hl>
??<p>Welcome to my home page!</p>
??</body>
??>>>?
4.2.4 字典方法
1.clear?
{
A:
??>>> d = {}
??>>> d['name'] = 'Gumby'
? ? ? ? >>> d['age'] = 42
??>>> d
??{'name': 'Gumby', 'age': 42}
? ? ? ? >>> return_value = d.clear()
? ?>>> d
??{}
??>>> print(return_value)
??None
B:
??>>> x = {}
??>>> y = x
??>>> x['key'] = 'value'
??>>> y
??{'key': 'value'}
??>>> x = {}
??>>> y
??{'key': 'value'}
??>>> x
??{}
C:
??>>> x = {}
??>>> y = x
??>>> x['key'] = 'value'
??>>> y
??{'key': 'value'}
??>>> x.clear()
??>>> y
??{}
??>>> x
??{} ??
}
2.
A:copy(淺復(fù)制)?
<注意一個問題,雖然是淺復(fù)制,但是=并不能導(dǎo)致值修改的同步,用方法才行>
{
>>> x = {'username':'admin' ,'machines':['foo' ,'bar','baz']}
>>> y = x.copy()
>>> y['username'] = 'mlh'
>>> y['machines'].remove('bar')
>>> y
{'machines': ['foo', 'baz'], 'username': 'mlh'}
>>> x
'machines': ['foo', 'baz'], 'username': 'admin'}
>>>?
}
B:deepcopy 這個可以理解成是真正的把值拷貝過去
{
>>> from copy import deepcopy
>>> d = {}
>>> d['name'] = ['Alfred' ,'Bertrand']
>>> c = d.copy()
>>> dc = deepcopy(d);
>>> d['name'].append('CVasdsa')
>>> c
{'name': ['Alfred', 'Bertrand', 'CVasdsa']}
>>> dc
{'name': ['Alfred', 'Bertrand']}
>>>?
}
3.fromkeys
? ?fromkeys方法使用給定的鍵建立新的字典,每個鍵默認對應(yīng)的值是None
? ?{
? ? ?>>> {}.fromkeys(['name','age'])
? ? ?{'name': None, 'age': None}
? ? ?>>> dict.fromkeys(['name','age'])
? ? ?{'name': None, 'age': None}
? ? ?>>> #默認值
? ? ?>>> dict.fromkeys(['name','age'] ,'(unknown)')
? ? ?{'name': '(unknown)', 'age': '(unknown)'}
? ?>>>?
? ?}
4.get
? 更寬松的訪問字典的方法,不存在不會報錯,而且支持默認參數(shù)
? {
? ? >>> d = {}
? ? >>> print(d['name'])
? ? Traceback (most recent call last):
? ? File "<pyshell#82>", line 1, in <module>
? ? print(d['name'])
? ? KeyError: 'name'
? ? >>> print(d.get('name'))
? ? None
? ? >>> print(d.get('name','N/A'))
? ? N/A
? }
5.has_key 判斷鍵在不在(3.0之上的版本不支持,我下面給出2.7.6的例子)?
?{
? ? >>> d = {}
? ? >>> d.has_key('name')
? ? False
? ? >>> d.has_key('name')
? ? True
? }
6.items和iteritems
? ? items方法將所有的字典項以列表方式返回,這些列表項中的每一項都來自于(鍵,值)
? ? 但是項在返回時并沒有特殊的順序。
? ?{
? ? ? >>> d = {'title':'Python web stre' ,'url' : 'http://www.python.org' ,'spam':0}
? ? ? >>> d.items()
? ? ? dict_items([('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python web stre')])
? ? ? >>> #iteritems方法的作用大致相同,但是會返回一個迭代器對象而不是列表
? ? ? <但是 什么鬼? 編譯錯誤了!>
? ? ? >>> it = d.iteritems()
? ? ? Traceback (most recent call last):
? ? ? File "<pyshell#15>", line 1, in <module>
? ? ? it = d.iteritems()
? keys方法將字典中的鍵以列表方式返回,而iterkeys則返回針對鍵的迭代器。
?{
? ?>>> d = {'x':1 ,'y' :2}
? ?>>> d.keys()
? ?dict_keys(['y', 'x'])
? ?>>> it = d.iterkeys()
? ?Traceback (most recent call last):
? ?File "<pyshell#4>", line 1, in <module>
? ?it = d.iterkeys()
? ?AttributeError: 'dict' object has no attribute 'iterkeys' ?
? }
?
8.pop
? pop方法返回字典的給定鍵的值,并且從字典中把這個鍵值對刪除。
? {
? ? >>> d = {'x':1 , 'y':2}
? ? >>> d.pop('x')
? ? 1
? ? >>> d
? ? {'y': 2}
? 隨機彈出來一組鍵值對,因為存數(shù)不是序列的,所以不能控制順序。
? <注意和pop的區(qū)別,pop是彈出來一個指定鍵的,poptiem是隨機彈出來一個刪除>
? {
? ? ?>>> d = {
? ? ? ? ? ?'url':'http://www.python.org' ,'spam':0 ,'title':'Python Web Site'
? ??}
>>> d.popitem()
('title', 'Python Web Site')
>>> d
{'url': 'http://www.python.org', 'spam': 0}
>>>?
? }
?
10.setdefault
? setdefault方法設(shè)定值,如果存在那就不修改,否則就增加上,如果默認參數(shù)是空,那么就默認None
? {
? ? >>> d = {}
? ? >>> d.setdefault('name' ,'N/A')
? ? 'N/A'
? ? >>> d
? ? {'name': 'N/A'}
? ? >>> d['name'] = 'Gumby'
? ? >>> d.setdefault('name' ,'N/A')
? ? 'Gumby'
? ? >>> d
? ? {'name': 'Gumby'}
? update方法可以利用一個字典項更新另一個字典項:
? <有就覆蓋,沒有就直接增加>
? {
? ? ?>>> d = {
? ? ? ? ? ? ? 'title':'Python Web Site',
? ? ? ? ? ? ? 'url' : 'http://www.python.org',
? ? ? ? ? ? ? 'changet':'Mar 14 22:09:15 MET 2008'
? ? ??}
? ? >>> x = {'title' : 'Python Language Website'}
? ? >>> d.update(x)
? ? >>> d
? ?{'changet': 'Mar 14 22:09:15 MET 2008', 'url': 'http://www.python.org', 'title': 'Python Language Website'}
? ?返回value,一個是列表,一個是索引
? ? {
? ? ? ?>>> d = {}
? ? ? ?>>> d[1] = 1
? ? ? ?>>> d[2] = 2
? ? ? ?>>> d[3] = 3
? ? ? ?>>> d[4] = 1
? ? ? ?>>> d.values()
? ? ? ?dict_values([1, 2, 3, 1]) ? ? ?
? ? }
?
4.0 ?
? 字典可以理解成是C++里的map,可以映射任何類型。字典這種結(jié)構(gòu)類型稱為映射(mapping)。
? 字典是Python中唯一內(nèi)建的映射類型,字典中的值并沒有特殊順序,但是都是存在一個特定的鍵里。鍵可以是數(shù)字、字符串甚至是元組。
4.1-4.2 了解創(chuàng)建和使用字典{
? ?>>> phonebook = {'Alice':'2345' ,'Beth':'9102' ,'Cecil':'3258'}
? ?>>> phonebook['Alice']
? ?'2345'
? ?>>> phonebool['asd']
? ?Traceback (most recent call last):
? ?File "<pyshell#2>", line 1, in <module>
? ?phonebool['asd']
? ?NameError: name 'phonebool' is not defined
}
4.2.1 dict函數(shù)
? ? 可以通過dict函數(shù),通過其他映射(比如其他字典)或者(鍵,值)這樣的序列對建立字典。
? ? ? >>> items = [('name' ,'Gumby') ,('age' ,42)]
? ? ? >>> d = dict(items)
? ? ? >>> d
? ? ? {'name': 'Gumby', 'age': 42}
? ? ? >>> d['name']
? ? ? 'Gumby'
? ? dict函數(shù)也可以通過關(guān)鍵字參數(shù)來創(chuàng)建字典
? ? ?>>> d = dict(name='Gumby' ,age=42)
>>> d
{'name': 'Gumby', 'age': 42}
4.2.2 基本字典操作
? ? ? ?len(d)
? d[k]
? d[k]= v
? k in d ?k是鍵不是值
? 鍵類型:其他不可變類型
4.2.3 格式化字符 ?
phonebook = {\
'Beth' : '9102' ,'Alice' : '2341' ,'Cecil' : '3258'\
}
"Cecil's phone number is %(Cecil)s." % phonebook
"Cecil's phone number is 3258."
{
??>>> template = '''<html>
??<head><title>%(title)s</title></head>
??<body>
??<hl>%(title)s</hl>
??<p>%(text)s</p>
??</body>'''
??>>> data = {'title':'Mu Home Page' ,'text':'Welcome to my home page!'}
??>>> print (template % data)
??<html>
??<head><title>Mu Home Page</title></head>
??<body>
??<hl>Mu Home Page</hl>
??<p>Welcome to my home page!</p>
??</body>
??>>>?
4.2.4 字典方法
1.clear?
{
A:
??>>> d = {}
??>>> d['name'] = 'Gumby'
? ? ? ? >>> d['age'] = 42
??>>> d
??{'name': 'Gumby', 'age': 42}
? ? ? ? >>> return_value = d.clear()
? ?>>> d
??{}
??>>> print(return_value)
??None
B:
??>>> x = {}
??>>> y = x
??>>> x['key'] = 'value'
??>>> y
??{'key': 'value'}
??>>> x = {}
??>>> y
??{'key': 'value'}
??>>> x
??{}
C:
??>>> x = {}
??>>> y = x
??>>> x['key'] = 'value'
??>>> y
??{'key': 'value'}
??>>> x.clear()
??>>> y
??{}
??>>> x
??{} ??
}
2.
A:copy(淺復(fù)制)?
<注意一個問題,雖然是淺復(fù)制,但是=并不能導(dǎo)致值修改的同步,用方法才行>
{
>>> x = {'username':'admin' ,'machines':['foo' ,'bar','baz']}
>>> y = x.copy()
>>> y['username'] = 'mlh'
>>> y['machines'].remove('bar')
>>> y
{'machines': ['foo', 'baz'], 'username': 'mlh'}
>>> x
'machines': ['foo', 'baz'], 'username': 'admin'}
>>>?
}
B:deepcopy 這個可以理解成是真正的把值拷貝過去
{
>>> from copy import deepcopy
>>> d = {}
>>> d['name'] = ['Alfred' ,'Bertrand']
>>> c = d.copy()
>>> dc = deepcopy(d);
>>> d['name'].append('CVasdsa')
>>> c
{'name': ['Alfred', 'Bertrand', 'CVasdsa']}
>>> dc
{'name': ['Alfred', 'Bertrand']}
>>>?
}
3.fromkeys
? ?fromkeys方法使用給定的鍵建立新的字典,每個鍵默認對應(yīng)的值是None
? ?{
? ? ?>>> {}.fromkeys(['name','age'])
? ? ?{'name': None, 'age': None}
? ? ?>>> dict.fromkeys(['name','age'])
? ? ?{'name': None, 'age': None}
? ? ?>>> #默認值
? ? ?>>> dict.fromkeys(['name','age'] ,'(unknown)')
? ? ?{'name': '(unknown)', 'age': '(unknown)'}
? ?>>>?
? ?}
4.get
? 更寬松的訪問字典的方法,不存在不會報錯,而且支持默認參數(shù)
? {
? ? >>> d = {}
? ? >>> print(d['name'])
? ? Traceback (most recent call last):
? ? File "<pyshell#82>", line 1, in <module>
? ? print(d['name'])
? ? KeyError: 'name'
? ? >>> print(d.get('name'))
? ? None
? ? >>> print(d.get('name','N/A'))
? ? N/A
? }
5.has_key 判斷鍵在不在(3.0之上的版本不支持,我下面給出2.7.6的例子)?
?{
? ? >>> d = {}
? ? >>> d.has_key('name')
? ? False
? ? >>> d.has_key('name')
? ? True
? }
6.items和iteritems
? ? items方法將所有的字典項以列表方式返回,這些列表項中的每一項都來自于(鍵,值)
? ? 但是項在返回時并沒有特殊的順序。
? ?{
? ? ? >>> d = {'title':'Python web stre' ,'url' : 'http://www.python.org' ,'spam':0}
? ? ? >>> d.items()
? ? ? dict_items([('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python web stre')])
? ? ? >>> #iteritems方法的作用大致相同,但是會返回一個迭代器對象而不是列表
? ? ? <但是 什么鬼? 編譯錯誤了!>
? ? ? >>> it = d.iteritems()
? ? ? Traceback (most recent call last):
? ? ? File "<pyshell#15>", line 1, in <module>
? ? ? it = d.iteritems()
? ?}
? keys方法將字典中的鍵以列表方式返回,而iterkeys則返回針對鍵的迭代器。
?{
? ?>>> d = {'x':1 ,'y' :2}
? ?>>> d.keys()
? ?dict_keys(['y', 'x'])
? ?>>> it = d.iterkeys()
? ?Traceback (most recent call last):
? ?File "<pyshell#4>", line 1, in <module>
? ?it = d.iterkeys()
? ?AttributeError: 'dict' object has no attribute 'iterkeys' ?
? }
?
8.pop
? pop方法返回字典的給定鍵的值,并且從字典中把這個鍵值對刪除。
? {
? ? >>> d = {'x':1 , 'y':2}
? ? >>> d.pop('x')
? ? 1
? ? >>> d
? ? {'y': 2}
? }
? 隨機彈出來一組鍵值對,因為存數(shù)不是序列的,所以不能控制順序。
? <注意和pop的區(qū)別,pop是彈出來一個指定鍵的,poptiem是隨機彈出來一個刪除>
? {
? ? ?>>> d = {
? ? ? ? ? ?'url':'http://www.python.org' ,'spam':0 ,'title':'Python Web Site'
? ??}
>>> d.popitem()
('title', 'Python Web Site')
>>> d
{'url': 'http://www.python.org', 'spam': 0}
>>>?
? }
?
10.setdefault
? setdefault方法設(shè)定值,如果存在那就不修改,否則就增加上,如果默認參數(shù)是空,那么就默認None
? {
? ? >>> d = {}
? ? >>> d.setdefault('name' ,'N/A')
? ? 'N/A'
? ? >>> d
? ? {'name': 'N/A'}
? ? >>> d['name'] = 'Gumby'
? ? >>> d.setdefault('name' ,'N/A')
? ? 'Gumby'
? ? >>> d
? ? {'name': 'Gumby'}
? ?} ?
? update方法可以利用一個字典項更新另一個字典項:
? <有就覆蓋,沒有就直接增加>
? {
? ? ?>>> d = {
? ? ? ? ? ? ? 'title':'Python Web Site',
? ? ? ? ? ? ? 'url' : 'http://www.python.org',
? ? ? ? ? ? ? 'changet':'Mar 14 22:09:15 MET 2008'
? ? ??}
? ? >>> x = {'title' : 'Python Language Website'}
? ? >>> d.update(x)
? ? >>> d
? ?{'changet': 'Mar 14 22:09:15 MET 2008', 'url': 'http://www.python.org', 'title': 'Python Language Website'}
?}
? ?返回value,一個是列表,一個是索引
? ? {
? ? ? ?>>> d = {}
? ? ? ?>>> d[1] = 1
? ? ? ?>>> d[2] = 2
? ? ? ?>>> d[3] = 3
? ? ? ?>>> d[4] = 1
? ? ? ?>>> d.values()
? ? ? ?dict_values([1, 2, 3, 1]) ? ? ?
? ? }
?
總結(jié)
以上是生活随笔為你收集整理的Python第四章-字典的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python第三章-字符串
- 下一篇: 简单工厂模式、工厂方法模式、抽象工厂模式