1.17 從字典中提取子集

2018-02-24 15:26 更新

問題

你想構(gòu)造一個(gè)字典,它是另外一個(gè)字典的子集。

解決方案

最簡單的方式是使用字典推導(dǎo)。比如:

prices = {
    'ACME': 45.23,
    'AAPL': 612.78,
    'IBM': 205.55,
    'HPQ': 37.20,
    'FB': 10.75
}
# Make a dictionary of all prices over 200
p1 = {key: value for key, value in prices.items() if value > 200}
# Make a dictionary of tech stocks
tech_names = {'AAPL', 'IBM', 'HPQ', 'MSFT'}
p2 = {key: value for key, value in prices.items() if key in tech_names}

討論

大多數(shù)情況下字典推導(dǎo)能做到的,通過創(chuàng)建一個(gè)元組序列然后把它傳給 dict() 函數(shù)也能實(shí)現(xiàn)。比如:

p1 = dict((key, value) for key, value in prices.items() if value > 200)

但是,字典推導(dǎo)方式表意更清晰,并且實(shí)際上也會(huì)運(yùn)行的更快些(在這個(gè)例子中,實(shí)際測(cè)試幾乎比 dcit() 函數(shù)方式快整整一倍)。

有時(shí)候完成同一件事會(huì)有多種方式。比如,第二個(gè)例子程序也可以像這樣重寫:

# Make a dictionary of tech stocks
tech_names = { 'AAPL', 'IBM', 'HPQ', 'MSFT' }
p2 = { key:prices[key] for key in prices.keys() & tech_names }

但是,運(yùn)行時(shí)間測(cè)試結(jié)果顯示這種方案大概比第一種方案慢1.6倍。如果對(duì)程序運(yùn)行性能要求比較高的話,需要花點(diǎn)時(shí)間去做計(jì)時(shí)測(cè)試。關(guān)于更多計(jì)時(shí)和性能測(cè)試,可以參考14.13小節(jié)

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)