如何將字典鍵作為Python中的列表返回?


Answers

Python> = 3.5替代方法:解壓縮到列表文字 [*newdict]

Python 3.5引入了新的拆包概括(PEP 448) ,現在您可以輕鬆完成:

>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]

使用*解包可以處理任何可迭代的對象,並且由於字典在迭代時返回鍵,因此可以通過在列表文字中使用它來輕鬆創建列表。

添加.keys()[*newdict.keys()]可能有助於使您的意圖更清晰一些,儘管它會花費您的功能查找和調用。 (誠實地說,這不是你應該擔心的事情)。

*iterable語法類似於做list(iterable) ,它的行為最初記錄在Python Reference手冊的Calls部分 使用PEP 448時,對*iterable地方的限制被放寬,允許它也被放置在列表,集合和元組文字中, 表達式列表上的參考手冊也被更新以說明這一點。

雖然相當於list(newdict) ,但它的速度更快(至少對於小型字典而言),因為沒有實際執行函數調用:

%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop

%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop

%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop

對於較大的字典,速度幾乎相同(通過大集合迭代的開銷勝過了函數調用的小成本)。

以類似的方式,您可以創建元組和字典鍵集:

>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}

注意元組情況下的尾隨逗號!

Question

Python 2.7中 ,我可以將字典項目作為列表獲取:

>>> newdict = {1:0, 2:0, 3:0}
>>> newdict.keys()
[1, 2, 3]

現在,在Python> = 3.3中 ,我得到了這樣的東西:

>>> newdict.keys()
dict_keys([1, 2, 3])

所以,我必須這樣做才能得到一個列表:

newlist = list()
for i in newdict.keys():
    newlist.append(i)

我想知道,有沒有更好的方法來返回Python 3中的列表?




你也可以做一個tuple(dict)或者set(dict)

>>> list(set(newdict))
[1, 2, 3]
>>> list(tuple(newdict))
[1, 2, 3]



不使用keys方法轉換為列表使其更具可讀性:

list(newdict)

並且在循環字典時,不需要keys()

for key in newdict:
    print key

除非你在循環中修改它,這需要事先創建一個鍵列表:

for key in list(newdict):
    del newdict[key]

在Python 2中,使用keys()可以獲得極少的性能增益




list(newdict)適用於Python 2和Python 3,提供了newdict鍵的簡單列表。 keys()不是必需的。 (:






Related