天天看點

Python-字典常用操作

一、建立字典

建立字典操作很簡單,隻需要記住使用大括号即可(python中的三種常用資料類型:清單 - [],元組 - (),字典 - {})

#建立一個空字典
dic = {}
# 建立一個有初始值的字典
dic1 = {'Tom':15,'Jhon':13,'Marry':12}
           

當然,字典的鍵,值均可以是int類型。

二、增加鍵-值

對于以上的dic1,如果還想增加一個15歲的Bob,那麼隻需要:

dic1['Bob'] = 15
           

當然,和python的list一樣,你無需保證字典裡的每個元素有相同的資料類型,也就是說,你也可以在dic1中添加這樣一個鍵-值對:

dic1[1] = 12
           

三、删除鍵-值

1、核武器級别的clear()方法

clear()方法可以用來清除字典中的所有資料,因為對字典造成了毀滅性的操作,是以也沒必要有傳回值。

dic1 = {'Tom':15,'Jhon':13,'Marry':12}
dic1.clear()#執行操作後dic1變為{}
           

2、指哪打哪的pop()方法

pop()方法的作用是:删除指定給定鍵所對應的值,傳回這個值并從字典中把它移除。注意字典pop()方法與清單pop()方法作用完全不同。

dic1 = {'Tom':15,'Jhon':13,'Marry':12}
t = dic1.pop('Tom')
print(t)##t = 15
print(dic1)##dic1 = {'Jhon':13,'Marry':12}
           

3、一個一個來的popitem()方法

字典popitem()方法作用是:随機傳回并删除字典中的一對鍵和值(項)。因為字典是無序的,是以沒有所謂的“最後一項”

#!/usr/bin/python
# -*- coding: UTF-8 -*-
site= {'name': '我的部落格位址', 'alexa': 10000, 'url':'http://blog.csdn.net/uuihoo/'}
pop_obj=site.popitem() # 随機傳回并删除一個鍵值對
print pop_obj   # 輸出結果可能是{'url','http://blog.csdn.net/uuihoo/'}
           

4、 del 全局方法(能删單一的元素也能清空字典,清空隻需一項操作)

#!/usr/bin/python
# -*- coding: UTF-8 -*-
site= {'name': '我的部落格位址', 'alexa': 10000, 'url':'http://blog.csdn.net/uuihoo/'}
del site['name'] # 删除鍵是'name'的條目 
del site  # 清空字典所有條目
           

四、查找

1、通過鍵查找值

這是字典的本職工作。主要有兩種情況: 

1. 通過鍵找到對應的值:

print(dic1['Tom'])

2. 判斷有無對應的鍵:使用函數 

dic.__contains__(鍵)

 ,有這個鍵傳回

True

,沒有傳回

False

2、通過值查找鍵

通過值查找鍵比較複雜,但是有時候也有這樣的需求。雖然實作起來相對複雜一點,但依舊可以達到這樣的目的,一般來說可通過如下3種方式實作: 

1) 充分利用 keys()【擷取字典裡的所有鍵】 、values()【擷取字典裡的索引值】、index(值)【傳回滿足條件的 list 索引】 函數。代碼如下:

   index()方法文法:

   str.index(str, beg=0, end=len(string))

  參數

  • str -- 指定檢索的字元串
  • beg -- 開始索引,預設為0。
  • end -- 結束索引,預設為字元串的長度。
list (dic1.keys()) [list (dic1.values()).index (13)]#傳回Jhon
           

2)通過定義get_key函數的方式。

def get_key (dict, value):
    return [k for k, v in dict.items() if v == value]
t = get_key (dic1, 15) # 傳回t=['Tom']
           

3)将原字典dict進行反轉得新字典new_dict,由原來的K-V存儲形式,變為V-K存儲形式

new_dict = {v : k for k, v in dict.items()}
new_dict [15]#傳回Tom
           

使用這種方法有一個前提條件:在原字典中,Value值必須是唯一且不重複的。以下兩種情況會導緻這種方法失敗。

dic2 = {'Tom':15,'Jhon':13,'Marry':12,'Bob':12}#值有重複元素,這樣轉化成鍵的時候會随機删掉一個
dic3 = {'Tom':15,'Jhon':13,'Marry':[12,13]}#值不唯一,轉化成鍵時違背字典鍵唯一的原則。
           

3、把字典key-值轉化為list

dic_list = list(dic.items())
print(dict_list)
#[('Tom', 15), ('Jhon', 13), ('Marry', 12)]
           

如果需要把鍵值對依次輸出,可以使用for循環:

for item in dic_list:
    print(item)#依次輸出鍵值對
#('Tom', 15)
#('Jhon', 13)
#('Marry', 12)
           

五、排序

1、sorted函數按val和key值對字典排序

d = {'a':1,'b':4,'c':2}
val=sorted(d.items(),key = lambda x:x[1],reverse = True)
key=sorted(d.items(),key = lambda x:x[0],reverse = True)
print(val)
print(key)
#[('b', 4), ('c', 2), ('a', 1)]
#[('c', 2), ('b', 4), ('a', 1)]
           

2、方法二

d = {'a':1,'b':4,'c':2}
print([(key,d[key])for key in sorted(d.keys())])
#[('a', 1), ('b', 4), ('c', 2)]