python 字典操作方法详解
字典是一種通過名字或者關鍵字引用的得數據結構,key 類型需要時被哈希,其鍵可以是數字、字符串、元組,這種結構類型也稱之為映射。字典類型是Python中唯一內建的映射類型。
注意,浮點數比較很不精確,因此千萬不要用浮點數作為key!
python字典包含了11個內置方法,具體如下:
| 序號 | 函數 | 描述 |
| 1 | clear(self) | 刪除字典內所有的元素 |
| 2 | copy(self) | 返回一個字典的淺copy,俗稱賦值 |
| 3 | fromkeys(*args,**kwargs) | 創建一個新字典,以序列seq中元素做字典的鍵,val為字典所有鍵對應的初始值 |
| 4 | get(self,k,d=None) | 返回指定鍵的值,如果值不在字典中返回default值 |
| 5 | items(self) | 以列表返回可遍歷的(鍵, 值) 元組數組 |
| 6 | keys(self) | 以列表返回一個字典所有的鍵 |
| 7 | pop(self,k,d=None) | 刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。 否則,返回default值 |
| 8 | popitem(self) | 隨機返回并刪除字典中的一對鍵和值 |
| 9 | setdefault(self,k,d=None) | 和get()類似, 但如果鍵不存在于字典中,將會添加鍵并將值設為default |
| 10 | update(self,E=None,**F) | 把self的東西更新到外面字典 |
| 11 | values(self) | 以列表返回字典中的所有值 |
具體舉例子解釋如下:
1,字典的鍵不能是list類型:
list = [1,2,3,4]
info2 = {list:'number'}
結果:
Traceback (most recent call last):
File "D:/字典.py", line 2, in <module>
info2 = {list:'number'}
TypeError: unhashable type: 'list'
2,list/set/dict 均不可被哈希 ,int、float、str、tuple:是可以哈希的
1 list.__hash__;
#結果為None
2 set.__hash__;
#結果為None
3 dict.__hash__;
#結果為None
4 print(int.__hash__);
# <slot wrapper '__hash__' of 'int' objects>
5 print(float.__hash__);
#<slot wrapper '__hash__' of 'float' objects>
6 print(str.__hash__);
#<slot wrapper '__hash__' of 'str' objects>
7 print(tuple.__hash__);
#<slot wrapper '__hash__' of 'tuple' objects>
3,增
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info['sex'] = 'fale'
print(info)
結果:
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'sex': 'fale'}
4,刪
4-1 pop():刪除指定key的鍵值對
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info.pop('work')
print(info)
結果:
{'name': 'jamnes', 'age': '32'}
4-2 clear():清除所有的鍵值對
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info.clear()
print(info)
結果:
{}
4-3setdefault():刪除指定的元素,如果沒有,則返回none
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info.setdefault('son')
print(info)
結果:
None
5,改
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info['age']='33'
print(info)
結果:
{'name': 'jamnes', 'age': '33', 'work': 'basketplayer'}
6,查
6-1 get():通過給定的key,查找對應的value,如果給定的可以在字典中無,則返回None
info ={'name':'jamnes','age':'32','work':'basketplayer'}
a =info.get('age')
print(a)
結果:
32
6-2 setdefault():通過給定的key,查找對應的value,如果給定的可以在字典中無,則返回None,
同時在字典中增加'test': None鍵值對
info ={'name':'jamnes','age':'32','work':'basketplayer'}
a =info.setdefault('age')
print(a)
print(info)
b =info.setdefault('sex')
print(b)
print(info)
結果:
32
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer'}
None
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'sex': None}
7,更新
7-1update()=
一,更新里面有的信息,就是改變
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info2 = {'name':'wade','age':'33','work':'basketplayer'}
info.update(info2)
print(info)
結果:
{'name':'wade','age':'33','work':'basketplayer'}
二,更新里面沒有的信息,就是添加
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info2 = {'honor':'3 champions'}
info.update(info2)
print(info)
結果:
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'honor': '3 champions'}
8,返回鍵,值,鍵值對
keys():以列表(list)返回字典中的所有鍵(key),字典是無序的,所以這個list返回的不是定義字典的順序
values():以列表(list)返回字典中的所有值,這個list的順序跟keys()返回的list順序是一一對應的
items():以列表(list)返回可遍歷的(鍵, 值) 元組數組,這個tuple的list包含了dictionary的所有數據
dict ={'k1':'v1','k2':'v2','k3':'v3'}
#1,請循環遍歷除所有的key
for keys in dict.keys():
print(keys)
#遍歷出所有的value
for value in dict.values():
print(value)
#遍歷出
for key,value in dict.items():
print(key+':'+value)
#結果:
k1
k2
k3
v1
v2
v3
k1:v1
k2:v2
k3:v3
9,練習字典
dic={'k1':"v1","k2":"v2","k3":[11,22,33]}
a.請循環輸出所有的key
b.請循環輸出所有的value
c.請循環輸出所有的key和value
d.請在字典中添加一個鍵值對,"k4":"v4",輸出添加后的字典
e.請在修改字典中“k1”對應的值為“alex”,輸出修改后的字典
f.請在k3對應的值中追加一個元素44,輸出修改后的字典
g.請在k3對應的值的第1個位置插入個元素18,輸出修改后的字典
dic={'k1':"v1","k2":"v2","k3":[11,22,33]}
# a.請循環輸出所有的key
for i in dic :
print(i)
for i in dic.keys():
print(i)
# b.請循環輸出所有的value
for i in dic.values():
print(i)
c.請循環輸出所有的key和value
for i,j in dic.items():
print(i,j)
# d.請在字典中添加一個鍵值對,"k4":"v4",輸出添加后的字典
dic2 = {'k4':'v4'}
dic.update(dic2)
print(dic)
dic['k4'] = 'v4'
print(dic)
# e.請在修改字典中“k1”對應的值為“alex”,輸出修改后的字典
dic['k1'] ='alex'
print(dic)
f.請在k3對應的值中追加一個元素44,輸出修改后的字典
dic['k3'].append(44)
print(dic)
# g.請在k3對應的值的第1個位置插入個元素18,輸出修改后的字典
dic['k3'].insert(0,18)
print(dic)
10,根據字典的鍵值進行排序
反序: reverse = True
mylist = ['學習', '工作', '玩耍', '學習', '工作', '工作']
print(mylist)
# list_element 是另外一個列表,里面的內容是list_element里面的無重復項
myset = set(mylist)
mydict = {}
for item in myset:
res = mylist.count(item)
sample = {item: res}
# print(res)
# print("the %d has found %d" % (item, mylist.count(item)))
mydict.update(sample)
print(mydict)
print(sorted(mydict.items(), key=lambda mydict:mydict[1],reverse=True))
11,OrderedDict 的使用
在Python中,dict這個數據結構由于hash的特性,是無序的,這在有時候會給我們帶來一些麻煩,幸運的時,在collections模塊中為我們提供了 OrderedDict ,當你需要獲取一個有序的字典對象時,試用它即可。
python中的字典(dict)對象可使用“鍵”,“值” 對的形式存取值,但默認的內置類型字典中的元素是無序的。Collections模塊下的OrderedDict類實現了對字典的排序,OrderedDict是dict的一個子類,實現了對字典排序的功能,下面看一下兩者數據類型的對比。
from collections import OrderedDict
print('Normal Dictionary:')
d = {}
d['name'] = 'v1'
d['age'] = 'v2'
d['job'] = 'v3'
d['address'] = 'v4'
d1 = {}
d1['job'] = 'v3'
d1['address'] = 'v4'
d1['name'] = 'v1'
d1['age'] = 'v2'
print(d)
print(d1)
print(d == d1)
print('OrderedDict:')
d2 = OrderedDict()
d2['name'] = 'v1'
d2['age'] = 'v2'
d2['job'] = 'v3'
d3 = OrderedDict()
d3['job'] = 'v3'
d3['age'] = 'v2'
d3['name'] = 'v1'
print(d2)
print(d3)
print(d2 == d3)
輸出結果:
Normal Dictionary:
{'name': 'v1', 'age': 'v2', 'job': 'v3', 'address': 'v4'}
{'job': 'v3', 'address': 'v4', 'name': 'v1', 'age': 'v2'}
True
OrderedDict:
OrderedDict([('name', 'v1'), ('age', 'v2'), ('job', 'v3')])
OrderedDict([('job', 'v3'), ('age', 'v2'), ('name', 'v1')])
False
從結果來看,如果是普通的字典,即使傳入的順序不一樣,但是依然是相同的字典;如果是OrderedDict ,傳入的順序不一樣,那么得到的字典是不一樣的。
集合操作方法詳解,請看下面博客:http://www.cnblogs.com/wj-1314/p/8423273.html
字符串操作方法詳解,請看下面博客:http://www.cnblogs.com/wj-1314/p/8419009.html
列表操作方法詳解,請看下面博客:http://www.cnblogs.com/wj-1314/p/8433116.html
總結
以上是生活随笔為你收集整理的python 字典操作方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [js常用]将秒转化为时分秒
- 下一篇: 什么是EIP?