我們之前學到過,用編號可以對列表經行索引,但是有些時候往往不能通過標號經行索引,可能需要使用字串之類的型別經行索引。比如:我們需要通過姓名查詢**號碼。那麼使用列表就會相對麻煩。對於列表我們需要這樣做:
>>> name=['a','b','c']
>>> num=['1','2','3']
>>> num[name.index('b')]
'2'
這樣做顯然比較麻煩,這裡我們就可以使用字典。
(注意:這個例子中可能有人會問為什麼**號碼需要用字串型別儲存,想象乙個如果a的號碼是0456會輸出什麼?沒錯,python會預設為八進位制處理,所以這裡我們需要使用字串)
1.字典的建立
對映是一種通過鍵(key)來引用值得資料結構。
字典就是python唯一內建的對映型別。
字典的建立可以通過下面的方式建立:
>>> phone=
字典是由多個鍵與其對應的值構成的鍵-值對組成,我們也把鍵-值對稱為項。
鍵和值之間由冒號(:)隔開,項之間由逗號(,)隔開,整個字典是由一對大括號括起來({}),空字典由兩個大括號組成。
注意:字典中鍵是唯一的,而值並不唯一。
dict()函式
dict()函式通過其他對映(比如其他字典)或者(鍵,值)對的序列建立字典。
>>> item=[('a','b'),('1','2')]
>>> d=dict(item)
>>> d
>>> d['a']
'b'>>> d['1']
'2'
dict函式可以把其他對映作為引數,並建立與其對映相同的字典。
2.字典的操作
字典的基本行為在很多方面的序列(sequence)類似:
注意:k in d在字典中檢查的是鍵,不是值,如果d不是字典是列表的話則檢查的是值而不是索引
在使用字典時,要注意兩點:
第一:鍵是任意不可變的型別
第二:看看下面的區別:
>>> f=
>>> f[42]='a'
traceback (most recent call last):
file "", line 1, in
indexerror: list assignment index out of range
>>> f={}
>>> f[42]='a'
>>> f
程式試圖將'a'關聯到乙個空列表中42號位置——這顯然是不可能的,但是字典實現了!
例:**本程式
#!/usr/bin/python2.6
#coding=utf-8
# 小型**本資料庫
people=,
'b':,
'c':
}# 描述性標籤,輸出時候使用
labels =
name=raw_input('name:')
# 查詢**號碼或者位址
request=raw_input('phone number(p) or address(a)?')
if request=='p':key='phone'
if request=='a':key='addr'
if name in people:print "%s's %s is %s." % \
(name,labels[key],people[name][key])
輸入為:
[root@localhost python]# ./hello.py
name:a
phone number(p) or address(a)?p
a's phone number is 222.
[root@localhost python]# ./hello.py
name:b
phone number(p) or address(a)?a
b's address is b.
字典的格式化字串
之前我們已經見過使用字串格式化元組中的所有值。如果是字典,可以在每個轉換說明符(conversion speifier)中的%字元後面加上鍵(用括號括起來)。後面在跟上其他說明元素:
>>> "a's phone is %(a)s" % phone
"a's phone is 2"
除了增加字串鍵之外,轉換說明符還是像以前一樣工作:
>>> a=
>>> '%(1)s %(2)s' % a
'hello word'
3.字典方法
字典也像其他內建型別一樣,有自己的方法,下面是一些可能有用的方法:
(1)clear
clear方法清楚字典中所有的項。這個是原地操作,所以沒有返回值,或者說返回值是none。
>>> a=
>>> a
>>> a.clear()
>>> a{}
(2)copy
copy方法返回乙個具有乙個相同鍵-值對的新字典(這個方法實現的是淺複製——shallow copy)。
>>> x=
>>> y=x.copy()
>>> y['username']='john'
>>> y['way'].remove('b')
>>> x
>>> y
可以看到,在副本的替換中,原始字典不受影響,但是如果想修改了某個值(原地修改而不是替換)
,原始字典也就會改變,因為同樣的值也儲存在原字典中,因為同樣的值也儲存在原字典中。
避免這個問題的一種方法就是使用深賦值(deep copy),賦值其包含的所有值。可以使用copy模組的deepcopy函式完成:
(3)fromkeys
fromkeys方法使用給定鍵建立新的字典,每個鍵的鍵值為none
>>> {}.fromkeys(['a','b'])
如果不想用none作為預設值,也可以自己指定預設值:
>>> {}.fromkeys(['a','b'],'1')
(4)has_key
has_key方法用於檢查鍵是否存在,一定程度上類似與k in d
其餘方法請查詢python手冊。
python 基礎之字典
建立和使用字典 字典由多個鍵與其對應的值構成的對組成。phonebook 名字是鍵,號碼是值。每個 號碼和值之間用冒號 隔開。每個項之間用 隔開。整個字典用的大括號括起來 可以用dict函式,通過其他對映 比如其他字典 或者 鍵,值 這樣的序列對建立字典。list name alice age 21...
python基礎之字典
dictionary 字典 儲存多個資料 列表是有序的物件集合 字典是無序的物件集合 字典用 定義,使用鍵值對儲存資料,鍵值對之間使用,隔開 鍵key是索引,值value是資料,鍵和值之間使用 分隔 鍵必須是唯一的,值可以取任何資料型別,但鍵只能使用字串 數字或元組 xiaoming print x...
Python基礎之字典
字典是另一種可變容器模型,且可儲存任意型別物件。字典的每個鍵值 key value 對用冒號 分割,每個對之間用逗號 分割,整個字典包括在花括號 中 格式如下所示 d 鍵必須是唯一的,但值則不必。值可以取任何資料型別,但鍵必須是不可變的。訪問字典裡的值,把相應的鍵放入到方括號中,如下例項 dict ...