Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字典理解和循环之间的区别_Python_Dictionary_Dictionary Comprehension - Fatal编程技术网

Python字典理解和循环之间的区别

Python字典理解和循环之间的区别,python,dictionary,dictionary-comprehension,Python,Dictionary,Dictionary Comprehension,我正在使用Python3.4,并且正在测试字典理解能力 假设我有以下代码: listofdict = [{"id":1, "title": "asc", "section": "123"},{"id":2, "title": "ewr", "section": "456"}] titles1 = [] titles2 = [] titles1.append({r["section"]: r["title"] for r in listofdict}) print("titles1 = " + s

我正在使用Python3.4,并且正在测试字典理解能力

假设我有以下代码:

listofdict = [{"id":1, "title": "asc", "section": "123"},{"id":2, "title": "ewr", "section": "456"}]
titles1 = []
titles2 = []
titles1.append({r["section"]: r["title"] for r in listofdict})
print("titles1 = " + str(titles1))

for r in listofdict:
  section = r["section"]
  title = r["title"]
  titles2.append({section: title})

print("titles2 = " + str(titles2))
我认为这两种方法应该给出相同的结果,但我得到了以下结果:

titles1 = [{'456': 'ewr', '123': 'asc'}]
titles2 = [{'123': 'asc'}, {'456': 'ewr'}]
标题2是我真正想要的,但我想用字典理解来做到这一点


编写字典理解的正确方法是什么?

您不能使用dict理解,因为dict理解会生成一个带有循环中的键和值的字典

您可以使用列表理解:

[{r["section"]: r["title"]} for r in listofdict]
这将在每次迭代中生成一个字典,并生成一个新列表:

>>> listofdict = [{"id":1, "title": "asc", "section": "123"},{"id":2, "title": "ewr", "section": "456"}]
>>> [{r["section"]: r["title"]} for r in listofdict]
[{'123': 'asc'}, {'456': 'ewr'}]

您不能使用dict理解来实现这一点,因为dict理解会生成一个字典,其中包含从循环中获取的键和值

您可以使用列表理解:

[{r["section"]: r["title"]} for r in listofdict]
这将在每次迭代中生成一个字典,并生成一个新列表:

>>> listofdict = [{"id":1, "title": "asc", "section": "123"},{"id":2, "title": "ewr", "section": "456"}]
>>> [{r["section"]: r["title"]} for r in listofdict]
[{'123': 'asc'}, {'456': 'ewr'}]

如果您确切地了解理解(任何类型)是如何映射到围绕
列表的显式循环的。追加
/
集合。添加
/
dict[…]=…
/
产生
,那么像这样调试代码就容易多了:只需将其转换为显式循环,然后看看它是否是您想要的。上的教程部分实际上对此进行了很好的解释。如果您确切地理解了理解(任何类型)是如何映射到围绕
列表的显式循环的。追加
/
设置。添加
/
dict[…]=…
/
产生
,调试这样的代码要容易得多:只需将其转换为显式循环,然后查看它是否是您想要的。上的教程部分实际上很好地解释了这一点。谢谢!工作得很有魅力!应该意识到我想建立一个字典列表,所以应该使用列表理解。谢谢!工作得很有魅力!我应该意识到我想建立一个字典列表,所以应该使用列表理解。