Python中的字典及其應用
- 2020 年 1 月 6 日
- 筆記
一.字典創建 1.賦值創建字典 #賦值創建字典,key-value—-鍵值對 In [1]: d = {'key1': 'value', 'key2': 'value2'}
In [2]: print d {'key2': 'value2', 'key1': 'value'}
In [3]: services = {'ssh': 22, 'ftp':[20, 21], 'http':[80, 8080]}
In [4]: print services {'ftp': [20, 21], 'http': [80, 8080], 'ssh': 22}
2.通過工廠函數創建字典 In [6]: users = dict(user1='123',user2='456',user3='789')
In [7]: print users {'user2': '456', 'user3': '789', 'user1': '123'}
3.通過字典的fromkeys方法創建字典,所有元素有一個默認值 #如果沒有指定默認值,默認值為None In [8]: print {}.fromkeys('hello') {'h': None, 'e': None, 'l': None, 'o': None} #給每個元素設置默認值為'123'
In [9]: print {}.fromkeys(['user1', 'user2', 'user3'], '123') {'user2': '123', 'user3': '123', 'user1': '123'}
應用案例: 生成多個銀行卡號,並初始化密碼為"000000" # 卡號由 6 位組成, 前 3 位是 610 , 後面的依次是 001, 002, 003...100
[root@localhost code1]# vim cards.py
#!/usr/bin/env python #coding:utf-8 cards = [] for i in range(1,101): a = '610%.3d' %(i) cards.append(a) print {}.fromkeys(cards,'000000')
二.分析字典的特徵(跟元組和列表比較) -字典不能索引和切片,因為字典是無序的數據類型; -字典不支持重複和連接; -字典支持成員操作符: 判斷字典的key值是否在字典中存在; in, not in 三.字典的增刪改查 1.增 -字典名[key] = value -d.update(a=1, b=2) -d.update({'a':1, 'b',2}) -d.setdefault('a', 1)
(1)通過字典名[key]=value,將key-value添加到字典中 In [10]: service = {'ftp':[20,21]} In [11]: service['http'] = [80,8080]
In [12]: service Out[12]: {'ftp': [20, 21], 'http': [80, 8080]}
(2)update方法實現添加:key存在,覆蓋value值,否則添加 In [21]: service = {'ftp':[20,21]}
In [22]: service1 = {'ssh':22}
In [23]: service.update(service1)
In [24]: print service {'ftp': [20, 21], 'ssh': 22}
(3)update添加 In [25]: print service {'ftp': [20, 21], 'ssh': 22}
In [27]: service.update(http=[80,8080],ftp=23)
In [28]: print service #覆蓋value值 {'ftp': 23, 'http': [80, 8080], 'ssh': 22}
(4)setdefault實現添加: key存在,不覆蓋value值,否則,添加
In [30]: service = {'ftp':[20,21]} In [32]: service.setdefault('ftp',23) Out[32]: [20, 21]
In [33]: print service {'ftp': [20, 21]} #key存在不覆蓋value值 In [34]: service.setdefault('ssh',23) Out[34]: 23
In [35]: print service {'ftp': [20, 21], 'ssh': 23} #key不存在,添加
2.改 -字典名[key]=value -d.update({'a':2, 'b':3}) -d.update(a=2, b=3) 3.查 -查看key值; -查看value值; -查看key-value鍵值對; -查看key是否存在;
(1)查看key值 In [38]: services Out[38]: {'cc': 23, 'ftp': [20, 21], 'http': [80, 8080], 'ssh': 22}
In [40]: services.keys() Out[40]: ['cc', 'ftp', 'http', 'ssh']
In [41]: services.viewkeys() Out[41]: dict_keys(['cc', 'ftp', 'http', 'ssh']) #給key起名字
In [45]: services.iterkeys() Out[45]: <dictionary-keyiterator at 0x2887730>
(2)查看value值 n [46]: services.values() Out[46]: [23, [20, 21], [80, 8080], 22]
(3)查看key-value鍵值對 In [47]: services.items() Out[47]: [('cc', 23), ('ftp', [20, 21]), ('http', [80, 8080]), ('ssh', 22)]
(4)查看key是否存在 In [48]: services.has_key('http') Out[48]: True
In [49]: services.has_key('sttp') Out[49]: False
(5)查看指定key對應的value值 如果key不存在,不報錯; 如果key存在,返回value值 In [50]: services.get('sttp') #key不存在,不報錯
In [51]: services.get('http') Out[51]: [80, 8080] #key存在,返回value值
In [52]: services['sttp'] #key不存在,直接報錯 KeyError Traceback (most recent call In [54]: services['http'] #key存在,返回value值 Out[54]: [80, 8080]
4.刪
d.pop(key) #刪除指定 key 的字典元素; d.popitem() #隨機刪除字典的 key-value 元素 ; del d[key] #刪除指定 key 的字典元素; d.clear() #清空字典元素
四.循環遍歷字典 In [82]: service Out[82]: {'ftp': 20, 'http': [80, 8080], 'ssh': 22} 1.遍歷key-value的值 In [85]: for i,j in service.items(): ….: print i,j ….: ftp 20 http [80, 8080] ssh 22
2.默認情況下,遍歷字典的key值 In [86]: for i in service: ….: print i ….: ftp http ssh
五.字典的應用 應用1: 通過字典實現case語句 -目前python不支持case語句; -實現case語句的兩種方式: -if…elif…elif…else… -字典實現
#!/usr/bin/env python #coding:utf-8 """ # 實現四則運算 # - 用戶分別輸入第一個數字,運算操作符,第三個數字; # - 根據用戶的運算操作打印出運算結果; # """
if...elif...elif...else... 實現: from __future__ import division num1 = input() ope = raw_input() num2 = input() if ope == '+': print num1+num2 elif ope == '-': print num1-num2 elif ope == '*': print num1*num2 elif ope == '/': print num1/num2 else: print 'error operator'
字典實現 case 語句 #coding:utf-8 """ 實現四則運算 用戶分別輸入第一個數字,運算操作符,第三個數字; 根據用戶的運算操作打印出運算結果; """
#!/usr/bin/env python #coding:utf-8 from future import division num1 = input() ope = raw_input() num2 = input() d = { "+" : num1+num2, "-" : num1-num2, "" : num1num2, "/" : num1/num2, } if not ope in d: print "error operator" else: print d[ope]
應用2:用戶管理系統 -1.註冊新用戶 -如果註冊用戶已經存在,則報錯; -需要填寫信息: name, passwd, gender, email,age; -2.用戶登錄 要求同之前寫的用戶登錄系統 -3.註銷用戶 用戶註銷時,需要輸入用戶名和正確的用戶密碼 -4.顯示用戶信息 顯示系統中存在所有已經註冊用戶的信息; -5.退出系統。
歡迎評論