1. 程式人生 > >python資料型別之字典

python資料型別之字典

字典:key :value 鍵值對儲存的一種資料結構
value值可以是任意資料型別:int float long list tuple set dict

1. 字典的建立

d = {}
print(d,type(d))
輸出結果:
{} <class 'dict'>

d = {
    '張三':[18,'男','玩手機'],
    '李四':[18,'女','修手機']
}
print(d)
print(d['李四'])
輸出結果:
{'張三': [18, '男', '玩手機'], '李四': [18, '女', '修手機']}
[18, '女', '修手機']

d2 = {
    'a':1,
    'b':2
}
print(d2)

d3 = {

    'a':{1,2,3},
    'b':{2,3,4}
}

print(d3)
輸出結果:
{'a': 1, 'b': 2}
{'a': {1, 2, 3}, 'b': {2, 3, 4}}

  • 字典的巢狀
students = {
    '06163012':{
        'name':'豬豬女孩',
        'age':18,
        'score':90
    },
    '03162003':{
        'name':'狗狗男孩',
        'age':19,
        'score':80
    }
}

print(students['03162003']['name'])
輸出結果:
狗狗男孩
  • 工廠函式
d5 = dict(a=1,b=2)
print(d5)
輸出結果:
{'a': 1, 'b': 2}

2. 字典的特性

  • 字典的所有操作都是通過它的key
d = {
    '1':'a',
    '8':'b',
    '2':'a'
}
print(d['1'])
#print(d['a']) #會報錯
輸出結果:
a
  • 字典不支援索引
    print(d[0])這個寫法會報錯,因為0不是這個字典的key,字典只能通過key查詢value

  • 字典不支援切片
    print(d[::-1])報錯

  • 字典的重複和連線是無意義的,因為字典的key是唯一的

  • 成員操作符:判斷的也是 某個值是否為字典的key

d = {
    '1':'a',
    '8':'b',
    '2':'a'
}
print('1' in d)
print('1' not in d)
輸出結果:
True
False
  • 字典的for 迴圈: 預設遍歷字典的key值
for key in d:
    print(key)
輸出結果:
1
8
2
for key in d:
    print(key,d[key])
輸出結果:
1 a
8 b
2 a

2. 字典的增加

1.增加一個元素

1).如果key值存在,則更新對應的value值
2).如果key值不存在,則新增對應的key-value值
services = {

    'http': 80,
    'ftp': 21,
    'ssh': 22
}
services['mysql'] = 3306
print(services)
services['http'] = 443
print(services)
結果:
{'http': 80, 'ftp': 21, 'ssh': 22, 'mysql': 3306}
{'http': 443, 'ftp': 21, 'ssh': 22, 'mysql': 3306}

2.新增多個key-value值

1).如果key值存在,則更新對應的value值
2).如果key值不存在,則新增對應的key-value值
services = {

    'http': 80,
    'ftp': 21,
    'ssh': 22
}
service_backup = {
    'tomcat':8080,
    'https':443,
    'http':8888
}

services.update(service_backup)
print(services)
services.update(flask=9000,http=999)
print(services)
結果:
{'http': 8888, 'ftp': 21, 'ssh': 22, 'tomcat': 8080, 'https': 443}

{'http': 999, 'ftp': 21, 'ssh': 22, 'tomcat': 8080, 'https': 443, 'flask': 9000}



3.setdefault新增key值:

1).如果key值存在,則不做修改
2).如果key值不存在,則新增對應的key-value值
services = {

    'http': 80,
    'ftp': 21,
    'ssh': 22
}
services.setdefault('http',9000)
print(services)
services.setdefault('oracle',44575)
print(services)
結果:
{'http': 80, 'ftp': 21, 'ssh': 22}
{'http': 80, 'ftp': 21, 'ssh': 22, 'oracle': 44575}

3. 字典的刪除

1. del關鍵字

services = {

    'http': 80,
    'ftp': 21,
    'ssh': 22,
    'mysql':3306
}
del services['http']
print(services)
輸出結果:
{'ftp': 21, 'ssh': 22, 'mysql': 3306}


2.pop刪除指定的key的key-value值

1.)如果key存在,刪除,並且返回刪除key對應的value值
2.)如果key不存在,直接報錯
services = {

    'http': 80,
    'ftp': 21,
    'ssh': 22,
    'mysql':3306
}
item = services.pop('http')
print(item)
print(services)
輸出結果:
80
{'ftp': 21, 'ssh': 22, 'mysql': 3306}

3.popitem刪除最後一個key-value

services = {

    'http': 80,
    'ftp': 21,
    'ssh': 22,
    'mysql':3306
}
item = services.popitem()
print('刪除的key-value對應的是:',item)
print(services)
輸出結果:
刪除的key-value對應的是: ('mysql', 3306)
{'http': 80, 'ftp': 21, 'ssh': 22}

4.清空字典內容

services = {

    'http': 80,
    'ftp': 21,
    'ssh': 22,
    'mysql':3306
}
services.clear()
print(services)
輸出結果:
{}

4. 字典的修改與查詢

  • 檢視字典裡面的key值
service = {
    'http':80,
    'mysql':3306
}
print(service.keys())
輸出結果:
dict_keys(['http', 'mysql'])
  • 檢視字典裡面的value值
service = {
    'http':80,
    'mysql':3306
}
print(service.values())
輸出結果:
dict_values([80, 3306])

  • 遍歷字典
service = {
    'http':80,
    'mysql':3306
}
for k,v in service.items():
    print(k,'---->',v)
for k in service:
    print(k,'---->',service[k])
輸出結果:
http ----> 80
mysql ----> 3306

http ----> 80
mysql ----> 3306

  • 檢視指定key對應的value值
    key值不存在,程式會報錯
service = {
    'http':80,
    'mysql':3306
}
print(service['http'])
#print(service['https']) 會報錯
輸出結果:
80
  • get 方法獲取指定key對應的value值

    如果key值存在,返回對應的value值
    如果key值不存在,預設返回None,如果需要指定返回的值,傳值即可

service = {
    'http':80,
    'mysql':3306
}
print(service.get('http'))
print(service.get('https','不存在'))
輸出結果:
80
不存在

5. 字典的小練習

  • 練習一
  1. 生成100個卡號;
    卡號以6102009開頭, 後面3位依次是 (001, 002, 003, 100),

  2. 生成關於銀行卡號的字典, 預設每個卡號的初始密碼為"redhat";

  3. 輸出卡號和密碼資訊, 格式如下:
    卡號 密碼
    6102009001 000000

"""
fromkeys第一個引數可以是 list/tuple/str/set
將第一個引數的元素作為字典的key值
並且所有key的value值一致,都為'00000000'
"""
# print({}.fromkeys({'1','2'},'0000000'))

#儲存所有卡號列表,也可以通過集合來儲存
card_ids = []

# 生成100個卡號
for i in range(100):
    # %.3d代表這個整型數佔3位 eg:1--->001
    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]))

在這裡插入圖片描述

  • 練習一
    重複的單詞: 此處認為單詞之間以空格為分隔符, 並且不包含,和 . ;

    1. 使用者輸入一句英文句子;
    2. 打印出每個單詞及其重複的次數;
str=input('輸入英文句子:')
word_list=str.split(' ')
word_dict={}
for i in word_list:
    times=1
    if i in word_dict:
        times+=1
    word_dict[i]=times
for k,v in word_dict.items():
    print(k,'---',v)

在這裡插入圖片描述

  • 練習二
    數字重複統計:
    1). 隨機生成1000個整數;
    2). 數字的範圍[20, 100],
    3). 升序輸出所有不同的數字及其每個數字重複的次數;