2015-02-11 139 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)]