2015-02-11 103 views
2

我想創建一個Python的字典列表。創建列表的常用方式適用於我。那是mylist = [{1:1},{2:2}]Python - 創建一個字典列表

但是,當我嘗試創建使用range()功能,mylist = [a:a for a in range(10)]的理解我得到語法錯誤。

但令我驚訝的是,如果我以同樣的方式構建一套,它會按預期工作。 myset = {a:a for a in range(10)}

我可以知道爲什麼這樣嗎?我使用Python3

+0

看起來這就是我們所說的一個很好的問題;它明顯需要更多的讚揚,因爲缺少研究工作和使用錯誤的術語。 – vaultah 2015-02-11 06:59:25

+0

您的Python語句'myset = {a:a在範圍內(10)}'不會構造'set'而是'dict'。你有它的價值,你可以通過索引訪問鍵,例如,'myset [5]'返回值'5',而相比之下,索引'set'數據結構引發'TypeError',因爲_「 'set'對象不支持索引「_」。如果你想在你的代碼中擁有一個_set理解,你必須寫更簡單的'myset = {a for a range(10)}'。 – gboffi 2015-02-11 07:02:27

回答

6

我想你想是這樣的:

mylist = [{a:a} for a in range(10)] 

你忘了{}

在第二個例子中,你myset是一個字典,沒有一套:

In [8]: type(myset) 
Out[8]: dict 

在這個例子中,{}表示dictionary comprehension,不設置理解。

3

你錯過了你的列表中理解一個字典創建:

mylist = [{a:a} for a in range(10)]