1. 程式人生 > >Python中關於字典的操作

Python中關於字典的操作

字典是什麼

在 Python 中,字典 是一系列鍵 — 值對 。每個鍵 都與一個值相關聯,你可以使用鍵來訪問與之相關聯的值。與鍵相關聯的值可以是數字、字串、列表乃至字典。事實上,可將任何 Python 物件用作字典中的值。dictionary(字典)是除列表以外python中最靈活的資料型別

字典和列表的區別

列表是有序的物件集和
字典是無序的物件集和

字典的表示

字典用{}定義,字典使用鍵值對儲存資料,鍵值對之間使用,分隔,鍵key是索引,值value是資料,鍵和值之間使用;分隔,鍵必須是唯一的(因為我們必須通過鍵來找到資料,值可以取任何資料型別,但鍵只能使用字串,數字或元組,字典是一個無序的資料集和,使用print函式輸出字典時, 通常輸出的順序和定義的順序是不一致的
舉例:

定義一個儲存學生資訊的字典
message_dict = {
'name' : 'guodong',
'age' : '21',
'sex' : 'M',
'weight' : '140',
'height' : '180'}
print message_dict

在這裡插入圖片描述
可以看到,控制檯輸出的順序和定義的順序是不一致的。

對字典的各種操作

1:取值,根據索引(key)取值,取值時,索引用中括號括起來

message_dict = {
'name' : 'guodong',
'age' : '21',
'sex' : 'M',
'weight' : '140',
'height' : '180'}
# 取字典中索引為name的值
print message_dict['name']

利用ipython實現:
在這裡插入圖片描述
2:增加/刪除
增加:索引使用中括號括起來
message_dict[‘id’] = ‘05’
print message_dict
在這裡插入圖片描述
刪除:索引使用小括號括起來
message_dict.pop(‘id’)
print message_dict
在這裡插入圖片描述
3:統計鍵值對的數量
print len(message_dict)
在這裡插入圖片描述
4:新增字典裡面已經存在的元素,會將以前元素內容修改
message_dict[‘age’] = 22
print message_dict
在這裡插入圖片描述
5:合併字典,如果與原字典鍵值索引重複,則會被更新

sex_dict = {'sex':'man',
            'grade':4}
# 將message_dict字典與sex_dict字典合併
message_dict.update(sex_dict)
print message_dict

在這裡插入圖片描述

字典的遍歷

遍歷所有的鍵-值對

可以使用一個 for 迴圈來遍歷字典

message_dict = {
'name' : 'guodong',
'age' : '21',
'sex' : 'M',
'weight' : '140',
'height' : '180'}
for key,value in message_dict.items():
	print ("key:" + key)
	print ("value:" + value)

用pycharm實現:
在這裡插入圖片描述

遍歷字典中的所有鍵

在不需要使用字典中的值時,方法 keys() 很有用。下面來遍歷字典favorite_languages ,並將每個被調查者的名字都打印出來:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
for name in favorite_languages.keys():
# 列印遍歷後的鍵,並用title方法將鍵的首字母變成大寫
print(name.title())

在這裡插入圖片描述
遍歷字典時,會預設遍歷所有的鍵,因此,如果將上述程式碼中的 for name in favorite_languages.keys(): 替換為 for name in favorite_languages: ,輸出
將不變。
如果顯式地使用方法 keys() 可讓程式碼更容易理解,你可以選擇這樣做,但如果你願意,也可省略它。

按順序遍歷字典中的所有鍵

字典總是明確地記錄鍵和值之間的關聯關係,但獲取字典的元素時,獲取順序是不可預測的。這不是問題,因為通常你想要的只是獲取與鍵相關聯的正確的值。
要以特定的順序返回元素,一種辦法是在 for 迴圈中對返回的鍵進行排序。為此,可使用函式 sorted() 來獲得按特定順序排列的鍵列表的副本

favorite_languages = {
    'jen' : 'python',
    'sarah' : 'c',
    'edward' : 'ruby',
    'phil' : 'python'
}
# 使用sorted函式對字典中的鍵進行排序
for name in sorted(favorite_languages):
    print (name.title())

用pycharm實現:
在這裡插入圖片描述

遍歷字典中的所有值

如果你感興趣的主要是字典包含的值,可使用方法 values() ,它返回一個值列表,而不包含任何鍵。例如,如果我們想獲得一個這樣的列表,即其中只包含被調查者選擇的各種語言,而不包含被調查者的名字,可以這樣做:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("The following languages have been mentioned:")
# 使用values方法遍歷字典中的所有值
for language in favorite_languages.values():
	print(language.title())

在這裡插入圖片描述
這種做法提取字典中所有的值,而沒有考慮是否重複。涉及的值很少時,這也許不是問題,但如果被調查者很多,最終的列表可能包含大量的重複項。為剔除重複項,可使用集合( set )。集合 類似於列表,但每個元素都必須是獨一無二的:

favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'ruby',
'phil': 'python',
}
print("The following languages have been mentioned:")
# 使用集合set剔除重複項
for language in set(favorite_languages.values()):
print(language.title())

用pycharm實現:
在這裡插入圖片描述

巢狀

有時候,需要將一系列字典儲存在列表中,或將列表作為值儲存在字典中,這稱為巢狀 。你可以在列表中巢狀字典、在字典中巢狀列表甚至在字典中巢狀字典。

字典與列表的巢狀

列表中存放字典
一個字典只能儲存一種動物的資訊,但無法儲存第二種動物的資訊,更別說是一群動物了,如何管理成群結隊的動物呢,我們可以建立一個動物列表,其中每種動物是一個字典,包含這種動物的各種資訊,我們來建立一個包含三種動物的列表:

# 定義三個動物字典
animal_01 = {'var' : 'dog','env' : 'land'}
animal_02 = {'var' : 'bird','env' : 'sky'}
animal_03 = {'var' : 'fish', 'env' : 'ocean'}
# 定義一個動物列表
animals = [animal_01,animal_02,animal_03]
# 遍歷動物列表,打印出每種動物
for animal in animals:
    print animal

在這裡插入圖片描述
字典中存放列表
有時候,需要將列表儲存在字典中,而不是將字典儲存在列表中。例如,你如何描述顧客點的比薩呢?如果使用列表,只能儲存要新增的比薩配料;但如果使用字典,就不僅可在其中包含配料列表,還可包含其他有關比薩的描述。
在下面的示例中,儲存了比薩的兩方面資訊:外皮型別和配料列表。其中的配料列表是一個與鍵 ‘toppings’ 相關聯的值。要訪問該列表,我們使用字典名和鍵 ‘toppings’,就像訪問字典中的其他值一樣。這將返回一個配料列表,而不是單個值

# 儲存所點比薩的資訊
pizza = {
'crust': 'thick',
'toppings': ['mushrooms', 'extra cheese'], #配料列表
}
# 概述所點的比薩
print("You ordered a " + pizza['crust'] + "-crust pizza " +
"with the following toppings:")
for topping in pizza['toppings']:
	print("\t" + topping)

在這裡插入圖片描述

字典與字典的巢狀

可在字典中巢狀字典,但這樣做時,程式碼可能很快複雜起來。例如,如果有多個網站使用者,每個都有獨特的使用者名稱,可在字典中將使用者名稱作為鍵,然後將每位使用者的資訊儲存在一個字典中,並將該字典作為與使用者名稱相關聯的值。在下面的程式中,對於每位使用者,我們都儲存了其三項資訊:名、姓和居住地;為訪問這些資訊,我們遍歷所有的使用者名稱,並訪問與每個使用者名稱相關聯的資訊字典:

users = {
'aeinstein': {
'first': 'albert',
'last': 'einstein',
'location': 'princeton',
},
'mcurie': {
'first': 'marie',
'last': 'curie',
'location': 'paris',
},
}
for username, user_info in users.items():
    print("\nUsername: " + username)
    full_name = user_info['first'] + " " + user_info['last']
    location = user_info['location']
    print("\tFull name: " + full_name.title())
    print("\tLocation: " + location.title())

在這裡插入圖片描述