字典的創(chuàng)建和使用

直接創(chuàng)建

d = {'age': 23, 'name': 'Daniel', 'sex': 1}

輸出結(jié)果:
{'age': 23, 'name': 'Daniel', 'sex': 1}


dict函數(shù)

# 通過序列對建立字典
vaulues = [('name', 'Daniel'), ('age', 23), ('sex', 1)]
print dict(values)

# 通過關(guān)鍵字建立字典
print dict(name='Daniel', age=23, sex=1)

# 如果 dict 不傳入任何參數(shù)將會返回一個空字典
print dict()

輸出結(jié)果:
{'age': 23, 'name': 'Daniel', 'sex': 1}
{'age': 23, 'name': 'Daniel', 'sex': 1}
{}


基本字典操作

d = {'name': 'Daniel', 'age': 23, 'sex': 1}

# 返回d項(xiàng)中(鍵-值對)的數(shù)量
len(d) 

# 刪除鍵為name的項(xiàng)
del d['age']

# 檢查d中是否含有鍵為name的項(xiàng),返回True或者False
'name' in d

提示:在字典中檢查鍵的成員資格比在列表中檢查值的成員資格更高效,數(shù)據(jù)結(jié)構(gòu)的規(guī)模越大,兩者的效率差距越明顯。


字典的鍵類型(任何不可變類型):int, float, string, tuple

{1: 'Daniel'}  # int
{1.2: 'Daniel'}  # float
{'name': 'Daniel'}  # string
{('name', 'Daniel'): 23}  # tuple

字典的格式化字符串

data = {'name': 'Daniel', 'age': 23, 'sex': 1}

template = 'name=%(name)s,age=%(age)s,sex=%(sex)s'
print template % data

template = 'name={name},age={age},sex={sex}'
print template.format(**data)

輸出結(jié)果:
name=Daniel,age=23,sex=1
name=Daniel,age=23,sex=1


字典方法

1、clear 清除字典中所有項(xiàng)
d = {'name': 'Daniel', 'age': 23, 'sex': 1}
d.clear()
print d
>>> {}
2、copy 返回一個具有相同鍵值對的新字典(這個方法實(shí)現(xiàn)的淺復(fù)制)
data1 = {'name': 'Daniel', 'machines': ['foo', 'bar', 'baz']}
data2 = data1.copy()
data1['name'] = 'biu'
data1['machines'].remove('bar')
print data1
print data2

輸出結(jié)果:
{'name': 'Daniel', 'machines': ['foo', 'baz']}
{'name': 'biu', 'machines': ['foo', 'baz']}

淺復(fù)制說明:(待說明...)

3、deepcopy 返回一個具有相同鍵值對的新字典(這個方法實(shí)現(xiàn)的深復(fù)制)
from copy import deepcopy
data1 = {'name': 'Daniel', 'machines': ['foo', 'bar', 'baz']}
data2 = deepcopy(data1)
data1['name'] = 'biu'
data1['machines'].remove('bar')
print data1
print data2

輸出結(jié)果:
{'name': 'biu', 'machines': ['foo', 'baz']}
{'name': 'Daniel', 'machines': ['foo', 'bar', 'baz']}

深復(fù)制說明:(待說明...)

4、fromkeys 使用給定的鍵建立新的字典,每個鍵默認(rèn)對應(yīng)的值為None
print dict.fromkeys(['name', 'age'])
# 如果不想使用None作為默認(rèn)值,也可以自己提供默認(rèn)值
print dict.fromkeys(['name', 'age'], 'null')

輸出結(jié)果:
{'age': None, 'name': None}
{'age': 'null', 'name': 'null'}

5、get 是一個更寬松的訪問字典項(xiàng)的方法,訪問一個不存在的鍵時,沒有任何異常,而得到了None值。還可以自定義默認(rèn)值,替換None
d = {}
print d.get('name')
print d.get('name', 'N/A')
d['name'] = 'Daniel'
print d.get('name')

輸出結(jié)果:
None
N/A
Daniel

6、has_key 檢查字典中是否含有給出的鍵,相當(dāng)于表達(dá)式 k in d,使用那種方式很大程度取決于個人愛好。Python 3.0中不包含這個函數(shù)。
d = {}
print d.has_key('name')
d['name'] = 'Daniel'
print d.has_key('name')

輸出結(jié)果:
False
True

7、items和iteritems

items將所有的字典以列表方式返回,這些列表項(xiàng)中的每一項(xiàng)都來自(鍵, 值)。但是在返回是并沒有特殊的順序。
iteritems的作用大致相同,但是會返回一個迭代器對象而不是列表

d = {'title': 'Python', 'url': 'http://www.python.org', 'spam': 0}
print d.items()

d = {'title': 'Python', 'url': 'http://www.python.org', 'spam': 0}
it = d.iteritems()
print it
print list(it)

輸出結(jié)果:
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python')]
<dictionary-itemiterator object at 0x108d12680>
[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python')]

8、keys和iterkeys,keys將字典中的鍵以列表形式返回,而iterkeys則返回針對鍵的迭代器
d = {'title': 'Python', 'url': 'http://www.python.org', 'spam': 0}
print d.keys()
print d.iterkeys()

輸出結(jié)果:
['url', 'spam', 'title']
<dictionary-keyiterator object at 0x108d126d8>

9、pop 用來獲得對應(yīng)于給定鍵的值,然后將這個鍵-值對從字典中移除
d = {'name': 'Daniel', 'age': 23, 'sex': 1}
d.pop('age')
print d

輸出結(jié)果:
{'name': 'Daniel', 'sex': 1}

9、popitem 彈出隨機(jī)的項(xiàng),因?yàn)樽值洳]有最后的元素或者其它有關(guān)順序的概念
d = {'name': 'Daniel', 'age': 23, 'sex': 1}
print d.popitem()
print d

輸出結(jié)果:
('age', 23)
{'name': 'Daniel', 'sex': 1}

10、setdefault 類似于get方法,就是能夠獲得與給定鍵相關(guān)關(guān)聯(lián)的值,還能在字典中不含有給定鍵的情況下設(shè)定相應(yīng)的鍵值
d = {}
print d.setdefault('name', 'N/A')
print d
d['name'] = 'Daniel'
print d.setdefault('name', 'N/A')
print d

輸出結(jié)果:
N/A
{'name': 'N/A'}
Daniel
{'name': 'Daniel'}

11、update 可以利用一個字典項(xiàng)更新另一個字典
d = {'name': 'Daniel', 'age': 23, 'sex': 1}
x = {'name': 'biu'}
d.update(x)
print d
d.update(name='biubiu')
print d

提供的字典中的項(xiàng)會被添加到舊的字典中,若有相同的鍵則會進(jìn)行覆蓋

輸出結(jié)果:
{'age': 23, 'name': 'biu', 'sex': 1}
{'age': 23, 'name': 'biubiu', 'sex': 1}

12、values和itervalues,values方法以列表的形式返回字典中的值,itervalues返回值的迭代器。與返回鍵的列表不同的是,返回值的列表中可以包含重復(fù)元素
d = {1:1, 2:2, 3:3, 4:1}
print d.values()

輸出結(jié)果:
[1, 2, 3, 1]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容