1、python3字典
字典是另一種可變容器模型,且可存儲任意類型對象。
字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中
dict1 = {key1:value1,key2:value2}
字典的鍵必須是唯一的 ,但值則不必;值可以去任何數據類型,但鍵必須是不可變的,如字符串,數字或元組。
>>> dict1 = {'name':'python','age':'20','character':'scripts'}
2、訪問字典
使用key訪問對應的值,如果key不存在則報錯
>>> dict1 = {'name':'python','age':'20','character':'scripts'}
>>> print(dict1['name'])
python
>>> print(dict1['age'])
20
>>> print(dict1['age1'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'age1
3、修改、刪除字典元素
將指定的key賦值即可修改字典元素值,能刪除單個的元素也能清空字典
>>> dict2 = {'key1':123,'key2':'dictionary'}
>>> dict2['key1']=888 #修改對應的key的值
>>> print(dict2)
{'key2': 'dictionary', 'key1': 888}
>>> dict2['key3']='python3' #給字典添加元素
>>> print(dict2)
{'key2': 'dictionary', 'key1': 888, 'key3': 'python3'}
>>> del dict2['key1'] #刪除鍵
>>> print(dict2)
{'key2': 'dictionary', 'key3': 'python3'}
>>> dict2.clear() #清空字典內容
>>> dict2
{}
>>> del dict2 #刪除字典
>>> dict2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'dict2' is not defined
#字典值可以沒有限制地取任何python對象,既可以是標准的對象,也可以是用戶定義的,但鍵不行。
#不允許同一個鍵出現兩次。創建時如果同一個鍵被賦值兩次,后一個值會被記住
>>> dict = {1:'a',2:'b',1:'c'}
>>> print(dict)
{1: 'c', 2: 'b'}
#鍵必須不可變,所以可以用數字,字符串或元組充當,而用列表就不行
>>> dict = {1:'a','abc':'python',('tuple','values'):'abc',['list1']:'listname'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
4、字典內置函數
>>> dict1 = {1:'a',2:'b',3:'c',4:'d'}
>>> len(dict1) #計算字段元素個數
4
>>> str(dict1) #輸出字典,以可以打印的字符串表示
"{1: 'a', 2: 'b', 3: 'c', 4: 'd'}"
>>> type(dict1) #返回變量類型
<class 'dict'>
5、python3字典方法
>>> dict = {'a':1,'b':2}
>>> dict.clear() #清除字典內的所有元素
>>> dict
{}
>>> dict = {'a':1,'b':{'c':22,'d':33}}
>>> dict1 = dict.copy() #返回字典的淺復制,即只拷貝第一層鍵對應值
>>> dict1
{'b': {'d': 33, 'c': 22}, 'a': 1}
>>> dict1.fromkeys(range(5),'000') #創建一個新字典,迭代序列做字典的鍵,value為字典的初始值,此處為"000"
{0: '000', 1: '000', 2: '000', 3: '000', 4: '000'}
>>> dict1 = {'k1':'v1','k2':'v2'}
>>> print(dict1.get('k3')) #get查找key是否存在,如果不存在則用None,或指定值
None
>>> print(dict1.get('k3','python'))
python
>>> 'k1' in dict1 #判斷鍵是否存在,存在返回true,否則返回false
True
>>> 'k3' in dict1
False
>>> dic = {'k1':'v1','k2':'v2'}
>>> print(dic.items()) #以列表返回可遍歷的(鍵, 值) 元組數組
dict_items([('k1', 'v1'), ('k2', 'v2')])
>>> for k,v in dic.items(): #迭代循環取值 ... print(k,v) ... k1 v1 k2 v2
>>> print(dic.keys()) #以列表返回字典的所有鍵 dict_keys(['k1', 'k2']) >>> print(dic.values()) #以列表返回字典的所有值 dict_values(['v1', 'v2']) >>> dic.setdefault('k3','v3') #和get()類似, 但如果鍵不存在於字典中,將會添加鍵並將值設為default或指定 'v3' >>> dic {'k1': 'v1', 'k3': 'v3', 'k2': 'v2'} >>> dic1 = {1:22,2:33,3:44} >>> dic.update(dic1) #把字典dic1的鍵/值對更新到dic里 >>> dic {1: 22, 2: 33, 3: 44, 'k3': 'v3', 'k1': 'v1', 'k2': 'v2'} >>> dic.pop(1) #刪除字典給定的鍵值,返回值為刪除的值,key必須指定,如刪除鍵不存在則返回default值,可指定。 22 >>> dic {2: 33, 3: 44, 'k3': 'v3', 'k1': 'v1', 'k2': 'v2'} >>> dic.pop(1,'hehe') 'hehe' >>> dic.popitem() #隨機刪除字典中的一對鍵和值(一般刪除最前的對) (2, 33) >>> dic.popitem() (3, 44)
6、小實例
根據奇數和偶數生成字典元素 dct1 = {} for i in range(20): if i%2 == 1: if 'odd' in dct1.keys(): dct1['odd'].append(i) else: dct1['odd'] = [i,] else: if 'even' in dct1.keys(): dct1['even'].append(i) else: dct1['even'] = [i,] print(dct1) 輸出結果: {'odd': [1, 3, 5, 7, 9, 11, 13, 15, 17, 19], 'even': [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]}
登陸購物車:
1 #!/usr/bin/env python 2 #coding:utf8 3 #file:Administrator 4 #time:20170926 5 import sys,os 6 #統計三次用戶錯誤鎖定 7 count = 0 8 #用戶密碼字典 9 name_pass = {'user1':'123','user2':'456','user3':'789'} 10 for i in range(10): 11 name_input = input('請輸入用戶名:') 12 if name_input in name_pass.keys(): #判斷用戶存在否 13 passwd_input = input('請輸入密碼:') 14 if passwd_input == name_pass[name_input]: #判斷對應用戶密碼 15 print('恭喜登陸成功!') 16 break 17 else: 18 if count > 1: 19 print('3次輸入錯誤,您賬號已鎖定') 20 exit() 21 print('{}用戶名不存在或密碼錯誤,請重新輸入!'.format(name_input)) 22 count += 1 23 else: 24 print('{}用戶不存在'.format(name_input)) 25 continue 26 #商品列表 27 shop_list = [ 28 ['iphone7',6500], 29 ['iphone6',4500], 30 ['金立s10',3400], 31 ['華為r79',2888], 32 ['魅族NOTE5',1888], 33 ['opppR9',3600], 34 ] 35 money = eval(input('請輸入你的預購金額:')) 36 shop_out = [] #購物車 37 all_kaixiao = 0 #統計值 38 while True: 39 print('++++++++++商品清單++++++++++++++') 40 for num,i in enumerate(shop_list,1): 41 if isinstance(i,list): 42 shop_li = i[0]+"\t"+str(i[1]) 43 print(num,shop_li) 44 else: 45 print(i) 46 print('q:退出\np:打印清單') 47 shop_name = input('請輸入要購買的商品編號:') 48 shop_name = str(shop_name) 49 50 if shop_name == 'q': 51 exit() 52 elif shop_name == 'p': #打印購物明細 53 print('------購物明細------') 54 for number,i in enumerate(shop_out,1): 55 if isinstance(i,list): 56 hehe = i[0]+":"+str(i[1]) 57 print(number,hehe) 58 else: 59 print(number,i) 60 print('---總計金額:%s---'%(all_kaixiao)) 61 continue #跳出循環,不然會輸出非法信息 62 if shop_name.isdigit() == 1: #判斷是否為數字 63 shop_name = int(shop_name) 64 else: 65 print('您的輸入非法,請重新輸入') 66 continue 67 unm1 = int(len(shop_list)) 68 if shop_name not in range(1,unm1+1): #判斷輸入商品編號是否在序列中 69 print('輸入有誤,請重新輸入!') 70 continue 71 else: 72 price = int(shop_list[shop_name - 1][1]) #商品單價 73 if money < price: 74 print('您的金額不足,無法購買') 75 continue 76 money = money - price # 剩余金額 77 out = shop_list[shop_name - 1][:] # 購買商品信息 78 shop_out.append(out[:]) # 加入購物車 79 all_kaixiao +=price #匯總消費 80 print('您購買的商品是:{}單價:{}元'.format(*out)) 81 print('您還可以消費:{}'.format(money))
