字典是最與php的數組相似的序列結構。python的列表只能是以索引數字開頭並且順序遞增的序列。字典則可以是以字母為key的序列。
元組一般用圓括弧來表示,如(1,2,3)
列表一般用方括弧來表示,如[1,2,3]
而字典(dict)則用大括弧來表示,如{‘a’:1,’b':2,’c':3}
與php不同,php的key,value是用key=>value來表示,python而是用冒號“:”來分隔。
字典可以使用大括弧書寫鍵和值或使用dict函數來建立。
dict函數可以指定兩個元組或列表來對應建立字典。如:
items = [('name','gumby'),('age','42')]
d = dict(items)
與列表的區別:
k in d(d為字典),尋找的是鍵,而非value,運算式 v in l(l為列表)則用來尋找值,而不是索引。
一些字典方法:
clear 清除字典。“原地操作”,不會傳回值,類似於列表的sort方法
copy方法返回一個相同索引值對兒的新字典。淺複製。因為值本身就是相同的,而不是副本。
在副本中替換值的時候,原始字典不受影響。但是如果修改了某個值,原始字典也會改變。避免這個問題的一種方法就是使用深度複製(deep copy)。
from copy import deepcopy
deepcopy(d)
d.fromkes方法使用給定的值建立新字典。每個鍵預設對應的是None
get方法擷取一個不存在的鍵時,不會報錯,會返回None
has_key方法相法於運算式k in d
items方法將所有的字母項以列表的方式返回。這些列表中的每一項都來自於(鍵,值)。但是項在返回時沒有特殊的順序。
iteritmes的方法大致相同,但是會返回一個迭代器對象而不是列表。在很多情況下iteritems效率更高。迭代器,相當於decode json之後的對象,而非數組、
keys方法將字典中的鍵以列表的形式返回。而iterkeys則返回針對鍵的迭代器。
pop彈出給定鍵的值。popitem會彈出最後一個元素(實際上是隨機項),但如果想一個接一個地移除並處理字典,popitem效率就會高很多,因為不必先擷取字典的索引值列表。
values和itervalues方法以列表或迭代器的形式返回字典中的值,傳回值的列表可以包含重複項。
看些python 字典操作執行個體
假設字典為dics = {0:'a', 1:'b', 'c':3}
1.從字典中取值,當鍵不存在時不想處理異常
[方法] dics.get('key', 'not found')
[例如]
[解釋] 當鍵'key'不存在是,列印'not found'(即想要處理的資訊),當存在是輸出索引值。
【其他解決方案一】
if key in dics: print dics[key] else: print 'not found!!'
【其他解決方案二】
try: print dics[key] except KeyError: print 'not found'
例子:
2.從字典中取值,若找到則刪除;當鍵不存在時不想處理異常
[方法] dics.pop('key', 'not found')
[例如]
[解釋] 當鍵'key'不存在是,列印'not found'(即想要處理的資訊),當存在是輸出索引值,並且去除該健。
3.給字典添加一個條目。如果不存在,就指定特定的值;若存在,就算了。
[方法] dic.setdefault(key, default)
[例如]
python 字典排序
dic = {'a':3 , 'b':2 , 'c': 1}
注意
排序之後原字典沒有變,順序依舊
兩個函數
1.lambda
功能: 建立匿名函數
區別: 和def函數定義,以下兩點區別
- lambda會建立一個函數對象,但不會把這個函數對象賦給一個標識符;而def則會把函數對象賦值給一個變數
- lambda它只是一個運算式,而def則是一個語句
案例:
2.iteritems()
功能: iteritems()以迭代器對象返回字典索引值對
區別: 和item相比:items以列表形式返回字典索引值對
案例:
注釋: 在函數sorted(dic.iteritems(), key = lambda asd:asd[1])中,第一個參數傳給第二個參數“鍵-索引值”,第二個參數取出其中的鍵([0])或索引值(1])