【導語】:你是否了解Python字典,以及創(chuàng)建Python字典都有哪些的實際的應用操作,還有如何訪問字典中的值等等,此文章就是針對這些問題,給出超出你預期的答案。
本文從七個方面介紹字典,包括:字典創(chuàng)建的5種方式、訪問字典元素、字典元素添加、字典元素刪除、字典的排序、字典的其他方法、序列解包(拆包)。
字典
字典是“鍵值對”的無序可變序列,字典中的每個元素都是一個“鍵值對”,包含:“鍵對象”和“值對象”。可以通過“鍵對象”實現(xiàn)快速獲取、刪除、更新對應的“值對象”。
列表中我們通過“下標數(shù)字”找到對應的對象。字典中通過“鍵對象”找到對應的“值對象”。
“鍵”:是任意的不可變數(shù)據(jù),比如:整數(shù)、浮點數(shù)、字符串、元組。但是:列表、字典、集合這些可變對象,不能作為“鍵”。并且“鍵”不可重復。不清楚可變類型與不可變類型,可參考另一邊文章http://www.itdecent.cn/p/950ad5a55b64
“值”:可以是任意的數(shù)據(jù),并且可重復。
空字典表示方式:{}或dict()
1.創(chuàng)建字典
#方式一:{key:value}
# {key: value}
dict1 = {'one': 1, 'two': 2, 'three': 3}
print(dict1)
#方式二:dict()
# dict(zip(keys, values))
# 或dict([(k, v), (k, v)])
# 或dict(((k, v), (k, v)))
k = ['one', 'two', 'three']
v = [1, 2, 3]
dict2 = dict(zip(k, v))
print(dict2)
dict3 = dict([('one', 1), ('two', 2), ('three', 3)])
print(dict3)
dict3 = dict((('one', 1), ('two', 2), ('three', 3)))
print(dict3)
#方式三:dict(key=value)
# dict(key=value)
dict4 = dict(one=1, two=2, three=3)
print(dict4)
#方式四:字典推導
# 字典推導式
lst1 = ['one', 'two', 'three']
lst2 = [1, 2, 3]
dict5 = {lst1[i]: lst2[i] for i in range(len(lst1))}
print(dict5)
方式五:fromkeys()
# fromkeys()
# 沒有指定value,默認None
dict6 = dict.fromkeys(['k1', 'k2', 'k3'])
print(dict6) # {'k1': None, 'k2': None, 'k3': None}
# 指定value
dict7 = dict.fromkeys(['k1', 'k2', 'k3'], 'value')
print(dict7) # {'k1': 'value', 'k2': 'value', 'k3': 'value'}
2.訪問字典元素
#定義一個字典
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
1.通過[鍵]獲得“值”。若鍵不存在,則拋出異常。
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
print(a['name']) # Lucy
print(a['sex']) # 報錯
2.通過get()方法獲得“值”。推薦使用。優(yōu)點是:指定鍵不存在,返回None;也可以設定指定鍵不存在時默認返回的對象。推薦使用get()獲取“值對象”。
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
print(a.get('sex', '不存在此鍵')) # 不存在此鍵
3.列出所有的鍵值對。
for k, v in a.items():
print(k, v)
4.列出所有的鍵,列出所有的值。
for k in a.keys():
print(k)
for v in a.values():
print(v)
5.檢測一個“鍵”是否在字典中。
print('name' in a) # True
3.字典元素添加
給字典新增“鍵值對”。如果“鍵”已經(jīng)存在,則覆蓋舊的鍵值對;如果“鍵”不存在,則新增“鍵值對”。
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
a['adder'] = '上海市'
print(a)
update()
# 更新,有則覆蓋,無則添加
# 1. 增加鍵值對
# 方式一:
dic9 = {'name': 'lucy', 'age': 18}
dic9.update(hobby='運動', hight=178)
print(dic9) # {'name': 'lucy', 'age': 18, 'hobby': '運動', 'hight': 178}
# 方式二:
dic10 = {'name': 'lucy', 'age': 18}
dic10.update([('hobby', '運動'), ('hight', 178)])
print(dic10) # {'name': 'lucy', 'age': 18, 'hobby': '運動', 'hight': 178}
dic10 = {'name': 'lucy', 'age': 18}
dic10.update((('hobby', '運動'), ('hight', 178)))
print(dic10) # {'name': 'lucy', 'age': 18, 'hobby': '運動', 'hight': 178}
# 方式三:
dic11 = {'name': 'lucy', 'age': 18}
dic12 = {'name': 'tom', 'hight': 178}
dic11.update(dic12)
print(dic11) # {'name': 'tom', 'age': 18, 'hight': 178}
# 2. 修改鍵所對應的值
dic13 = {'name': 'lucy', 'age': 18}
dic13.update(name='tom')
print(dic13) # {'name': 'tom', 'age': 18}
setdefault(key,default)
# setdefault(key,default)
# 如果default省略,向字典中添加了key:None,
# 如果dedault未省略。則向字典中添加了key:default
dict1 = {"name": "張三", "age": 18, "score": 100, "hobby": "籃球"}
print(dict1)
dict1.setdefault("111")
print(dict1) # {'name': '張三', 'age': 18, 'score': 100, 'hobby': '籃球', '111': None}
dict1.setdefault("222", 222)
print(dict1) # {'name': '張三', 'age': 18, 'score': 100, 'hobby': '籃球', '111': None, '222': 222}
4.字典元素刪除
#pop() 刪除指定鍵值對,并返回對應的“值對象”。
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
b = a.pop('age')
print(b) # 18
print(a) # {'name': 'Lucy', 'job': 'programmer'}
#popitem() 隨機刪除一個鍵值對,并返回。若想一個接一個地移除并處理項,這個方法就非常有效。
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
b = a.popitem()
print(b)
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
for i in range(len(a)):
a.popitem()
print(a) # {}
clear()
#clear() 刪除所有鍵值對
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
a.clear()
print(a) # {}
del
a = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
del a['name']
print(a) # {'age': 18, 'job': 'programmer'}
5.字典的排序
dts = dict(a=3,b=2,c=1)
dts
# 按照鍵排序
dts = sorted(dts.items(),key=lambda x:x[0],reverse=True)
# 按照值排序
dts = sorted(dts.items(),key=lambda x:x[1],reverse=True)
dts
6.字典的其他方法
① copy()
import copy
# a.copy(),和列表的使用完全相同,拷貝的是最外層的地址
dict4 = {"name": "張三", "age": 18, "score": 100, "hobby": "籃球"}
print(dict4)
dict5 = dict4.copy()
dict4["name"] = "jack"
print(dict4)
print(dict5)
print(dict5 is dict4)
print("*" * 20)
# 思考問題,列表和字典的拷貝
# a.
list1 = [1, 2, 3, {"name": "張三", "age": 18}]
list2 = list1.copy()
list1[-1]["age"] = 20
print(list2)
# b
list1 = [1, 2, 3, {"name": "張三", "age": 18}]
list2 = copy.deepcopy(list1)
list1[-1]["age"] = 20
print(list2)
print("*" * 30)
# c
dict4 = {"hobby": ["籃球"]}
print(dict4)
dict5 = dict4.copy()
dict4["hobby"].append("足球")
print(dict5)
② collections
# 實現(xiàn)鍵保留 值相加
from collections import defaultdict
d = defaultdict(int)
objs = [{'F29958SVDK6': 12}, {'F29958SVDK5': 12}, {'F29958SVDK6': 12}, {'F29958SVDK6': 12}, {'F29958SVDK6': 12}]
for obj in objs:
for key, value in obj.items():
d[key] += value
print(d)
7.序列解包(拆包)
序列解包可以用于元組、列表、字典,可以讓我們方便的對多個變量賦值。
>>> x,y,z = (10,20,30)
>>> x
10
>>> y
20
>>> z
30
>>> a,b,c = [10,20,30]
>>> a
10
>>> b
20
>>> c
30
序列解包用于字典時,默認是對“鍵”進行操作;如果需要對鍵值對操作,則需要使用items();如果需要對“值”進行操作,則需要使用values();
di = {'name': 'Lucy', 'age': 18, 'job': 'programmer'}
a, b, c = di
print(a, b, c) # name age job
a, b, c = di.items()
print(a) # ('name', 'Lucy')
a, b, c = di.values()
print(a) # Lucy
參考鏈接:https://blog.csdn.net/mall_lucy/article/details/106601632