1.字典的含義:
字典和列表類似,是可變序列,與列表不同的是,字典是無序的可變序列,保存的內容是以 鍵值對 的形式存放的。鍵是唯一的,而值可以是多個。值可以取任意數據了類型,但鍵必須是不可變的。
創建一個字典:
1 . 定義字典時,每個元素都包含兩個部分“鍵(key)“和“值(value)“。
2 . 創建字典時,在鍵(key)和值(value)只見用冒號分隔,相鄰兩個元素用逗號分隔,所有元素用大括號括起來。
例如:
dic = {1: "ssh", 2: "ftp", "key": "value"} #冒號前的為鍵,冒號后的為值
print(dic)運行結果:
{1: 'ssh', 2: 'ftp', 'key': 'value'}
創建一個空字典:
s = {} 方法一
print(s)運行結果:
{}d = dict() 方法二
print(d)運行結果:
{}
字典的鑲套:
student = {'123':{'name':'tom','age':18,'score':99},'456':{'name':'lily','age':19,'score':100}
}print(student['123']['name'])運行結果為:
tom
2. 字典的特征:
1 . 通過鍵(key)而不是通過索引來讀取字典
d = {'1':'a','2':'b'
}
print(d['1'])運行結果:
a
2 . 成員操作符(針對key)
d = {'1':'a','2':'b'
}
print('1' in d)
print('1' not in d)運行結果:
True
False
3 . for循環 針對key
d = {'1':'a','2':'b'
}
for key in d:print(key)運行結果:
1
2
4 . 遍歷字典,輸出字典的key和對應的值
d = {'1':'a','2':'b'
}
for key in d:print(key,d[key])運行結果:
1 a
2 b
3 . 字典元素的查看、增加、刪除
1 . 查看字典的值:
service = {'http':80,'ftp':23,'ssh':22
}
print(service.keys()) 查看字典的key值運行結果:
dict_keys(['http', 'ftp', 'ssh'])print(service.values()) 查看字典的value值運行結果:
dict_values([80, 23, 22])print(service.items()) 查看字典的key-value值運行結果:
dict_items([('http', 80), ('ftp', 23), ('ssh', 22)])print(service['http']) 通過key值查找value值(key值不存在時會報錯)運行結果:
80print(service.get('http')) 使用get查看key的value值,若key存在,返回對應的value值運行結果:
80print(service.get('https','443')) 若key不存在,返回None 或者設定好的默認值。運行結果:
443
2 . 字典元素的增加:
service = {'http':80,'ftp':23,'ssh':22
}
service['https'] = 443
print(service) 如果key值不存在,則添加對應的key-value值運行結果:
{'http': 80, 'ftp': 23, 'ssh': 22, 'https': 443}service['ftp'] = 21
print(service) 如果key值存在,則更新對應的value值運行結果:
{'http': 80, 'ftp': 21, 'ssh': 22}service_backup = {'tomcat':8080,'mysql':3306
}
service.update(service_backup) 增加多個key值
print(service)運行結果:
{'http': 80, 'ftp': 23, 'ssh': 22, 'tomcat': 8080, 'mysql': 3306}或者可以這樣寫:
service.update(flask=9000,dns=53)
print(service)運行結果:
{'http': 80, 'ftp': 23, 'ssh': 22, 'flask': 9000, 'dns': 53}service.setdefault('http',9090) 如果key值存在:不做修改
print(service)運行結果:
{'http': 80, 'ftp': 23, 'ssh': 22}service.setdefault('oracle',44575) 如果key值不存在,則添加對應的key-value
print(service)運行結果:
{'http': 80, 'ftp': 23, 'ssh': 22, 'oracle': 44575}
3 . 字典元素的刪除:
service = {'http':80,'ftp':23,'ssh':22
}
del service['http'] 刪除key值和value值
print(service)運行結果:
{'ftp': 23, 'ssh': 22}item = service.pop('http') pop刪除指定key對應的value值
print(item) 如果key存在,刪除,并且返回刪除key對應的value(可以用變量取接收)
print(service) 如果不存在,直接報錯運行結果:
80
{'ftp': 23, 'ssh': 22}item = service.popitem() popitem刪除最后一個key-value值
print(item)
print(service)運行結果:
('ssh', 22)
{'http': 80, 'ftp': 23}service.clear() 清空字典內容
print(service)運行結果:
{}
練習:
1 . 數字重復統計:
1). 隨機生成1000個整數;
2). 數字的范圍[20, 100],
3). 升序輸出所有不同的數字及其每個數字重復的次數;
import random
all_num = []for item in range(1000):all_num.append(random.randint(20,100))# 對生成好的1000個數進行排序,然后加到子字典里
sorted_num = sorted(all_num)
num_dict ={}for num in sorted_num:if num in num_dict:num_dict[num] += 1else:num_dict[num] = 1print(num_dict)
2 . 重復的單詞: 此處認為單詞之間以空格為分隔符, 并且不包含,和 . ;
# 1. 用戶輸入一句英文句子;
# 2. 打印出每個單詞及其重復的次數;
s = input('s:')
# 1.把每個單詞分割處理
s_li = s.split()
print(s_li)
# 通過字典存儲單詞和改單詞出現的次數
word_dict = {}
for item in s_li:if item not in word_dict:word_dict[item] = 1else:word_dict[item] += 1
print(word_dict)
3 . 隨機生成100個卡號;
1 .卡號以6102009開頭, 后面3位依次是 (001, 002, 003, 100),
2. 生成關于銀行卡號的字典, 默認每個卡號的初始密碼為"redhat";
3. 輸出卡號和密碼信息, 格式如下:
卡號 密碼 6102009001 000000
代碼如下:
card_ids =[]
# 生成100個卡號
for i in range(100):# %.3d:代表整型數占3位s = '6102009%.3d' %(i+1)# 將每次生成的卡號都加入到列表中card_ids.append(s)card_ids_dict = {}.fromkeys(card_ids,'redhat')
# print(card_ids_dict)
print('卡號\t\t\t\t\t密碼')
for key in card_ids_dict:print('%s\t\t\t%s' %(key,card_ids_dict[key]))
4 . 判斷101-200之間有多少個素數,并輸出所有素數
hah_li = []
for i in range(101,200):for k in range(2,i):if i%k == 0:breakelse:hah_li.append(i)
print(hah_li)