字典
字典的索引是key,key一般是字符串或數(shù)字
names = {123:'geed','park':'nice','900':'pool'}
names[123]
names['park']
訪問不存在的key會導(dǎo)致錯誤,在訪問前可以先判斷成員資格,使用if語句
if name in birthdays:
keys() / values() / items()
字典的dict_keys、dict_values 和dict_items數(shù)據(jù)類型可用于for循環(huán)。獲取數(shù)據(jù)類型type()。
for v in spam.values()
for k in spam.keys()
for i in spam.items(),for key , value in spam.items()
list(spam.keys())
get()方法
該方法僅僅用于dict()。類似于向dict中取一個key的vaule,如果key不存在就返回默認值,不會改變原始dict。
>>> picnicItems = {'apples': 5, 'cups': 2}
>>>picnicItems.get('cups', 0)
2
setdefault()方法
為Dict的key設(shè)置一個默認值,如果Dict中不存在該Key,就在Dict中添加該Key及其默認value同時返回該key的value,如果該Key存在就返回key對應(yīng)的values值。
key存在就不改變dict,如果key不存在dict就會添加新的鍵值對。
統(tǒng)計字符串的字母出現(xiàn)的次數(shù):
def count_char(message):
count = {}
for char in message:
count.setdefault(char,0)
count[char] = count[char] + 1
print(count)
return(count)
測試函數(shù)
import unittest
from open import count_char
class OpenTest(unittest.TestCase):
def test_count(self):
message = 'It was a bright cold day in April, and the clocks were striking thirteen.'
fun_return = count_char(message)
result = {' ': 13, ',': 1, '.': 1, 'A': 1, 'I': 1, 'a': 4, 'c': 3, 'b': 1, 'e': 5, 'd': 3, 'g': 2, 'i':
6, 'h': 3, 'k': 2, 'l': 3, 'o': 2, 'n': 4, 'p': 1, 's': 3, 'r': 5, 't': 6, 'w': 2, 'y': 1}
self.assertEqual(fun_return,result)
unittest.main()
從運行的結(jié)果看,dict的排序每次都有差異,即便排序不一樣,也不會影響 self.assertEqual(fun_return,result)的結(jié)果
5.3.2 嵌套的字典和列表
例子的思路
allGuests = {'Alice': {'apples': 5, 'pretzels': 12},
'Bob': {'ham sandwiches': 3, 'apples': 2},
'Carol': {'cups': 3, 'apple pies': 1}}
循環(huán)兩次字典將水果的名字提取出來,再通過setdefault()將水果的名字和數(shù)量添加到新的列表
import pprint
def total_brought(guest):
furists = {}
for brougt in guest.values():
for furist , numbers in brougt.items():
furists.setdefault(furist,0)
furists[furist] = furists[furist] + numbers
pprint.pprint(furists)
5.6.2 列表到字典
用 if - else 去實現(xiàn)感覺邏輯很清晰,但是代碼更多。
用setdefault邏輯上要適應(yīng)一下才行
def add_to_inventory(intentory,added_items):
for added_item in added_items:
# if added_item in intentory.keys():
# intentory[added_item] += 1
# else :
# intentory[added_item] = 1
intentory.setdefault(added_item,0)
intentory[added_item] = intentory[added_item] + 1
return intentory
用循環(huán)對比了一下兩種方式實現(xiàn)的時間
使用if-else耗時37.539s
setdefault耗時38.618s
if-else執(zhí)行時間更短。
time1 = datetime.datetime.now()
print(time1)
n = 10**6
while n>0:
stuff = {'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
new = add_to_inventory(stuff,dragonLoot)
n = n -1
# print(new)
time2 = datetime.datetime.now()
print(time2)
print(time2-time1)
獲取系統(tǒng)時間(us)
系統(tǒng)時間,us級別
import datetime
datetime.datetime.now()
print(time2-time1)