6. 字典

基于網(wǎng)絡(luò)課程《Python全棧開發(fā)專題》 記錄筆記拣凹,請支持正版課程息裸。

字典

phone = {'移動':10086, '聯(lián)通':10010, '電信':10000}
print(phone['移動'])   # 10086

dict()

# 在字典中,key/value 的數(shù)據(jù)類型可以不一致
items = [['移動', 10086], ('電信', 10000), ['聯(lián)通', 10010], (1, '搗亂的')]
d = dict(items)    # {'移動': 10086, '電信': 10000, '聯(lián)通': 10010, 1: '搗亂的'}

# 用命名參數(shù)
d1 = dict(name='二狗', sex='女', age='48')  # {'name': '二狗', 'sex': '女', 'age': '48'}

dict練習(xí):

items = []
while True:
    key = input('Input key: ')
    if key == 'exit()':
        break
    value = input('Input value: ')
    items.append([key, value])
print(dict(items))

字典的基本操作

# len
items = {'移動':10086, '聯(lián)通':10010, '電信':10000}
print(len(items))   # 3

# 修改字典里面的值:有key的修改舞肆,沒有的添加
items['移動'] = 1008611
items['T-Moblie'] = 'I do not know'
print(items)   # {'移動': 1008611, '聯(lián)通': 10010, '電信': 10000, 'T-Moblie': 'I not know'}

# in
print('CMCC' in items)
print('T-Moblie' in items)

字典基本操作練習(xí):

IDEs = {
    'eclipse':
    {
     'languages': ['Java', 'Python', 'JavaScript', 'PHP'],
     'organization': 'Eclipse基金會'
    },
    'vsualstudio':
    {
     'languages': ['C#', 'C++', 'VB.NET'],
     'organization': '微軟'
    },
    'webstorm':
    {
     'languages': ['JavaScript', 'Node.js', 'Java', 'Kotlin'],
     'organization': 'JetBrains'
    }
}

labels = {'languages':'支持的編程語言', 'organization':'所屬機(jī)構(gòu)'}

IDE = input('輸入IDE的名字: ')
# 去空各拷,小寫
findIDE = IDE.strip().lower()

if not findIDE in IDEs:
    print('找不到這個IDE磷脯!')
else:
    choice = input('要查找IDE支持的語言(lang)還是所屬機(jī)構(gòu)(org): ')
    if choice == 'lang':
        print(labels['languages'], ':', IDEs[findIDE]['languages']);
    elif choice == 'org':
        print(labels['organization'], ':', IDEs[findIDE]['organization']);
    else:
        print('好好輸入,別瞎整霞幅!')

用format_map方法格式化字符串

# 列表的
values1 = (1, 2, 'hello')
str1 = 'abc %d  xyz, %d, %s world'
print(str1 % values1)

# 字典的
values2 = {'title':'極客起源', 'url':'http://www.baidu.com', 'company':'你猜'}
str2 = """
<html>
    <head>
        <title>{title}</title>
        <meta charset="utf-8"/>
    </head>
    <body>
        <h1>{title}</h1>
        <a href="{url}">{company}</a>
    </body>
</html>
"""
print(str2.format_map(values2))
'''
輸出如下:
<html>
    <head>
        <title>極客起源</title>
        <meta charset="utf-8"/>
    </head>
    <body>
        <h1>極客起源</h1>
        <a >你猜</a>
    </body>
</html>
'''

序列與迭代

d = {'name': 'Bill', 'age':20, 'sex':"男", 'salary': 5000.25}

# 迭代字典中的key
for key in d:
    print('{} = {}'.format(key, d[key]), end="   ")

print()
# 同時迭代key-value
for key, value in d.items():
    print('{} = {}'.format(key, value), end="   ")

print()
# 并行迭代
list1 = [1, 2, 3, 4, 5]
list2 = ['a', 'b', 'c', 'd', 'e']
for i in range(len(list1)):
    print("lsit1[{index}] = {}, list2[{index}] = {}".format(list1[i], list2[i], index=i))
    
print()
# 壓縮迭代
for value in zip(list1, list2):
    print(value, end=' ')
# (1, 'a') (2, 'b') (3, 'c') (4, 'd') (5, 'e')

# 壓縮迭代 + dict() => 把兩個列表轉(zhuǎn)為一個字典
print()
items = []
for value in zip(list2, list1):
    print(value, end=' ')
    items.append(value)
print()
d1 = dict(items)
print(d1)


# 反轉(zhuǎn)排序迭代
values1 = [4, 1, 5, 6, 3, 9, 7]
print(sorted(values1))   # [1, 3, 4, 5, 6, 7, 9]
values2 = reversed(values1)
for v in values2:
    print(v, end=" ")
    
print()
print(''.join(list(reversed('abcdefg'))))

clear方法

names1 = {'Bill':20, 'Mike':30, 'John':50}
names2 = names1

names1['Bill'] = 45
print(names2)   # {'Bill': 45, 'Mike': 30, 'John': 50}

# 使用這種方法漠吻,names2不會被清空
# names1 = {}
print(names2)  # {'Bill': 45, 'Mike': 30, 'John': 50}

# 使用clear()方法,names1 和 names2 都會被清空
names1.clear() 
print(names1)  # {}
print(names2)  # {}

復(fù)制字典: copy 和 deepcopy

p1 = {'name':'Mike', 'age':30, 'fullName':['Bill', 'Gates']}

# copy 淺層復(fù)制
p2 = p1.copy()
print(p2)

p1['age'] = 60
# 復(fù)制了第一層 司恳!
print(p1)   # 60
print(p2)   # 30

# 如果是:p1['fullName'] = ['Bill', 'Clinton']途乃, p2不會變的,“復(fù)制第一層”扔傅!
p1['fullName'][1] = 'Clinton'
print(p1)   # ['Bill', 'Clinton']
print(p2)   # ['Bill', 'Clinton']


# deepcopy
from copy import deepcopy
p3 = deepcopy(p1)
p1['fullName'][1] = 'xxx'
print(p1)   # xxx
print(p2)   # xxx
print(p3)   # Clinton

根據(jù)key創(chuàng)建字典: fromkeys

d1 = {}.fromkeys(['name', 'company', 'salary']);
print(d1)  # {'name': None, 'company': None, 'salary': None}

d2 = {}.fromkeys(('name', 'company', 'salary'));
print(d2)  # {'name': None, 'company': None, 'salary': None}

# 非空字典耍共,沒用
d3 = {'age':18}.fromkeys(('name', 'company', 'salary'));
print(d3)  # {'name': None, 'company': None, 'salary': None}

# 指定默認(rèn)值
d4 = {}.fromkeys(('name', 'company', 'salary'), 'default')
print(d4)  # {'name': 'default', 'company': 'default', 'salary': 'default'}

get方法

dict = {'name':'Bill', 'age':30}
print(dict['age'])
# print(dict['salary'])  # key不存在會拋出異常

print(dict.get('age'))  # 30
print(dict.get('salary')) # None, 用get方法,不會拋出異常

一個小練習(xí):

d = {'China':'偉大祖國', 'Apple':'蘋果', 'pen':'盆猎塞,啊不是试读,鋼筆', 'Android':'安卓'}

while True:
    word = input('請輸入英文單詞:')
    
    if word == 'exit()':
        break
    
    if d.get(word) == None:
        print('未收錄的單詞: {}'.format(word))
    else:
        print('"{}"的意思是:"{}"'.format(word, d.get(word)))

獲取字典中的key和value(items和key方法)

# 注意,最后一個元素邢享,我手誤鹏往,寫了一個None!:痢伊履!
d = { 'help':'幫助', 'bike':'自行車', 'plane':'灰機(jī)', 'apple':'蘋果', }

print(d.items())  
# 輸出:外層是列表內(nèi)層是元組
# dict_items([('help', '幫助'), ('bike', '自行車'), ('plane', '灰機(jī)'), ('apple', '蘋果')])

# 遍歷1
for key_value in d.items():
    print('key={key}, value={value}'.format(key=key_value[0], value=key_value[1]))

# 遍歷2
for key, value in d.items():
    print('key={}, value={}'.format(key, value))

# 歪個樓
l1 = [(1, 2, 3), (4, 5, 6), ('a', 'b', 'c')]
for v1, v2, v3 in l1:
    print('v1={}, v2={}, v3={}'.format(v1, v2, v3))
    
d_items = d.items()
d['bike'] = '我把Bike修改了'
print(d_items)
# 輸出如下:修改字典,items也會改變
# dict_items([('help', '幫助'), ('bike', '我把Bike修改了'), ('plane', '灰機(jī)'), ('apple', '蘋果')])

# keys方法
print(d.keys())  # dict_keys(['help', 'bike', 'plane', 'apple'])

彈出字典中的值(pop和popitem)

# pop款违,獲取指定key值唐瀑,并彈出key-value對
# popitem,獲取字典中最后一個key-value對

d = {'name':'Bill', 'age':18, 'salary':'3800'}
d['sex'] = '中'
d['address'] = 'ApplePark'

# pop
print(d.pop('name'))  # Bill
print(d)  # {'age': 18, 'salary': '3800', 'sex': '中', 'address': 'ApplePark'}

# popitem
for i in range(len(d)):
    x = d.popitem()
    print('key={}, value={}'.format(x[0], x[1]))
'''
key=address, value=ApplePark
key=sex, value=中
key=salary, value=3800
key=age, value=18
'''

添加但不修改value(setdefault方法)

d = {'name':'Bill', 'age':30}

# 不存在就添加插爹,存在就修改
d['salary'] = 38000
d['age'] = 50

# 只添加不修改
print(d.setdefault('address', '中國'))  # 中國
print(d)  # {'name': 'Bill', 'age': 50, 'salary': 38000, 'address': '中國'}

print(d.setdefault('age', 99))  # 50 !!!!!
print(d)  # {'name': 'Bill', 'age': 50, 'salary': 38000, 'address': '中國'}

print(d.setdefault("abc"))   # None
print(d.setdefault("age"))   # 50

成批導(dǎo)入字典數(shù)據(jù)(updates方法)

d1 = {'name':'Bill', 'age':18}
d2 = {'age':55, 'address':'Xi\'an'}

# 用一個字典更新另一個字典哄辣,有的更新请梢,沒有的增加
d1.update(d2)
print(d1)   # {'name': 'Bill', 'age': 55, 'address': "Xi'an"}

獲取字典中的值列表(values方法)

d = {'a':1, 'b':2, 'c': 2, 'd':3, 'e':4, 'e':911}

# 字典中key也是沒有重復(fù)的,相當(dāng)于java Map的put力穗,會覆蓋
print(d)   # {'a': 1, 'b': 2, 'c': 2, 'd': 3, 'e': 911}
print(d.keys())  # dict_keys(['a', 'b', 'c', 'd', 'e'])
print(d.values())  # dict_values([1, 2, 2, 3, 911])

#遍歷
for val in d.values():
    print(val)

練習(xí)1:setdefault() + 隨機(jī)數(shù)

d = {}
import random
for i in range(1000):
    
    key = random.randint(0, 99)
    
    # 方法1
#     if d.get(key) == None:
#         d[key] = '隨便吧{}'.format(i)
    # 方法2
    d.setdefault(key, '隨便吧{}'.format(i));
        
for key, value in d.items():
    print('key={}, value={}'.format(key, value))
    
print('最終的長度是:{}'.format(len(d)))

練習(xí)2:format_mat()的靈活運(yùn)用

ASCII碼表

  • ord(c) 獲得ASCII碼
  • 數(shù)字 "0 ~ 9"的ASCII碼是"48 ~ 57"
  • if ord(c) in range(48, 58)判斷字符是否為數(shù)字
s = 'abccc786fff987i56GG11'

number = ''
s1 = ''
index = 0
d = {}

for i in range(len(s)):
    c = s[i]
    # ord 獲取ASCII碼
    # range(48, 58)  0~9的ASCII碼是48~57
    if ord(c) in range(48, 58):
        number += c
    else:
        if len(number) > 0:
            s1 += "{{number{}:010}}".format(index)
            d['number' + str(index)] = int(number)
            number = ''
            index += 1
        s1 += c
else:
    if len(number) > 0:
        s1 += "{{number{}:010}}".format(index)
        d['number' + str(index)] = int(number)

print('原字符串: ', s)
print('格式化字符串: ', s1)
print('格式化字典: ', d)
print('最終結(jié)果: ', s1.format_map(d))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毅弧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子当窗,更是在濱河造成了極大的恐慌够坐,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崖面,死亡現(xiàn)場離奇詭異元咙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)巫员,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門庶香,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人简识,你說我怎么就攤上這事赶掖。” “怎么了财异?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵倘零,是天一觀的道長。 經(jīng)常有香客問我戳寸,道長呈驶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任疫鹊,我火速辦了婚禮袖瞻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拆吆。我一直安慰自己聋迎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布枣耀。 她就那樣靜靜地躺著霉晕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捞奕。 梳的紋絲不亂的頭發(fā)上牺堰,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音颅围,去河邊找鬼伟葫。 笑死,一個胖子當(dāng)著我的面吹牛院促,可吹牛的內(nèi)容都是我干的筏养。 我是一名探鬼主播斧抱,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼渐溶!你這毒婦竟也來了辉浦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茎辐,失蹤者是張志新(化名)和其女友劉穎盏浙,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荔茬,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年竹海,在試婚紗的時候發(fā)現(xiàn)自己被綠了慕蔚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斋配,死狀恐怖孔飒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艰争,我是刑警寧澤坏瞄,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站甩卓,受9級特大地震影響鸠匀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逾柿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一缀棍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧机错,春花似錦爬范、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至萧诫,卻和暖如春斥难,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背财搁。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工蘸炸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尖奔。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓搭儒,卻偏偏與公主長得像穷当,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子淹禾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容