2014-11-14 65 views
0

我認爲[]和list()是創建列表的兩種平等方式。但是,如果你想與dictionnary鍵列表,python3中的[]和列表()之間的區別

var = [a_dict.keys()] 

不起作用,因爲type(var)[dict_keys],正確的語法是:

var = list(a_dict.keys()) 

我找不到對這種行爲的很好的解釋。你是否有一個 ?

+0

可能重複[在Python,爲什麼名單(無)一個錯誤,但\ [無\ ]是不是?](http://stackoverflow.com/questions/24120448/in-python-why-is-listnone-an-error-but-none-is-not) – jonrsharpe 2014-11-14 14:37:00

+0

我從中學到了什麼,總是使用new_list = list()比new_list = []更安全。之後一個不混合兩種語法。 – comte 2014-11-14 15:23:26

+0

一旦你理解了兩種形式之間的區別,這不是問題。但是,如果您覺得額外的幾個字符可以爲您節省一些疑惑,那就去吧! – jonrsharpe 2014-11-14 15:24:44

回答

2

a_dict.keys()dictionary view object,它返回一個對象,它可以被迭代以產生a_dict的鍵。所以這條線:

[a_dict.keys()] 

是說在python「我在這做一個列表與一個元素」,這一個元素是字典鍵迭代器。這是一個列表文字的語法。

現在這行:

list(a_dict.keys()) 

是對list內置函數的調用。此函數list嘗試迭代參數並生成一個列表。這是語法中的函數調用

等效列表文字(實際列表理解)是改爲:

[key for key in a_dict.keys()] 

希望這有助於的

1
[a_dict.keys()] 

這一個將單個元素放在列表中。就好像你要寫[1]一樣。在這種情況下,一個元素將成爲一個列表。

list(a_dict.keys()) 

該構造函數接受一個序列,並將序列的所有元素添加到容器。

+1

注意,這與'dict_keys'無關,'[anything]'總是構造一個單元素列表,'list(iterable)'總是通過遍歷'iterable'來生成一個列表。 – delnan 2014-11-14 14:39:48

+1

另請注意,所有其他容器的工作方式相似。 – 2014-11-14 14:44:22