第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用Python將兩個列表轉(zhuǎn)換為字典

用Python將兩個列表轉(zhuǎn)換為字典

海綿寶寶撒 2019-05-31 17:05:03
用Python將兩個列表轉(zhuǎn)換為字典想象一下你有:keys = ['name', 'age', 'food']values = ['Monty', 42, 'spam']制作以下詞典的最簡單方法是什么?a_dict = {'name' : 'Monty', 'age' : 42, 'food' : 'spam'}
查看完整描述

4 回答

?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗 獲得超12個贊

試試這個:


>>> import itertools

>>> keys = ('name', 'age', 'food')

>>> values = ('Monty', 42, 'spam')

>>> adict = dict(itertools.izip(keys,values))

>>> adict

{'food': 'spam', 'age': 42, 'name': 'Monty'}

在Python 2中,與zip.


查看完整回答
反對 回復(fù) 2019-05-31
?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊

想象一下你有:

keys = ('name', 'age', 'food')values = ('Monty', 42, 'spam')

制作以下詞典的最簡單方法是什么?

dict = {'name' : 'Monty', 'age' : 42, 'food' : 'spam'}

最具表現(xiàn)力的-Python2.7和3,DECT理解:

對使用dict構(gòu)造函數(shù)的一個可能的改進(jìn)是使用dict理解的本機(jī)語法(而不是列表理解,就像其他人錯誤地說的那樣):

new_dict = {k: v for k, v in zip(keys, values)}

在Python 2中,zip返回列表,若要避免創(chuàng)建不必要的列表,請使用izip相反(別名為zip可以減少遷移到Python 3時的代碼更改)。

from itertools import izip as zip

因此,這仍然是:

new_dict = {k: v for k, v in zip(keys, values)}

Python 2,適合<=2.6

izip從…itertoolszip在Python 3中。izip它比Python 2的zip更好(因為它避免了不必要的列表創(chuàng)建),并且適合2.6或更低版本:

from itertools import izip
new_dict = dict(izip(keys, values))

Python 3

在Python 3中,zip中的相同函數(shù)。itertools模塊,因此簡單地說:

new_dict = dict(zip(keys, values))

但是,DECT的理解會更有表現(xiàn)力(參見這個答案末尾的性能評估)。

所有案件的結(jié)果:

在所有情況下:

>>> new_dict{'age': 42, 'name': 'Monty', 'food': 'spam'}

說明:

如果我們看看幫助dict我們看到,它采取了各種形式的論點:

>>> help(dict)class dict(object)
 |  dict() -> new empty dictionary |  dict(mapping) -> new dictionary initialized from a mapping object's
 |      (key, value) pairs
 |  dict(iterable) -> new dictionary initialized as if via:
 |      d = {}
 |      for k, v in iterable:
 |          d[k] = v
 |  dict(**kwargs) -> new dictionary initialized with the name=value pairs
 |      in the keyword argument list.  For example:  dict(one=1, two=2)

最佳方法是使用可迭代的方法,同時避免創(chuàng)建不必要的數(shù)據(jù)結(jié)構(gòu)。在Python 2中,zip創(chuàng)建了一個不必要的列表:

>>> zip(keys, values)[('name', 'Monty'), ('age', 42), ('food', 'spam')]

在Python 3中,相當(dāng)于:

>>> list(zip(keys, values))[('name', 'Monty'), ('age', 42), ('food', 'spam')]

和Python 3的zip只創(chuàng)建一個可迭代的對象:

>>> zip(keys, values)<zip object at 0x7f0e2ad029c8>

由于我們希望避免創(chuàng)建不必要的數(shù)據(jù)結(jié)構(gòu),所以我們通常希望避免Python 2的數(shù)據(jù)結(jié)構(gòu)。zip(因為它創(chuàng)建了一個不必要的列表)。

績效較差的替代辦法:

這是一個正在傳遞給dict構(gòu)造函數(shù)的生成器表達(dá)式:

generator_expression = ((k, v) for k, v in zip(keys, values))dict(generator_expression)

或相當(dāng)于:

dict((k, v) for k, v in zip(keys, values))

這是傳遞給dict構(gòu)造函數(shù)的列表理解:

dict([(k, v) for k, v in zip(keys, values)])

在前兩種情況下,額外的一層非操作(因此是不必要的)計算被放置在zip迭代上,而在列表理解的情況下,額外的列表被不必要地創(chuàng)建。我希望他們都表現(xiàn)得不太好,當(dāng)然也不會更多。

業(yè)績審查:

在64位Python3.4.3中,在Ubuntu14.04上,命令從最快到最慢:

>>> min(timeit.repeat(lambda: {k: v for k, v in zip(keys, values)}))

0.7836067057214677

>>> min(timeit.repeat(lambda: dict(zip(keys, values))))

1.0321204089559615

>>> min(timeit.repeat(lambda: {keys[i]: values[i] for i in range(len(keys))}))

1.0714934510178864

>>> min(timeit.repeat(lambda: dict([(k, v) for k, v in zip(keys, values)])))

1.6110592018812895

>>> min(timeit.repeat(lambda: dict((k, v) for k, v in zip(keys, values))))

1.7361853648908436


查看完整回答
反對 回復(fù) 2019-05-31
?
不負(fù)相思意

TA貢獻(xiàn)1777條經(jīng)驗 獲得超10個贊

>>> keys = ('name', 'age', 'food')

>>> values = ('Monty', 42, 'spam')

>>> dict(zip(keys, values))

{'food': 'spam', 'age': 42, 'name': 'Monty'}


查看完整回答
反對 回復(fù) 2019-05-31
  • 4 回答
  • 0 關(guān)注
  • 4594 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號