我是Python新手。我试图理解这种语法,但由于我不知道各种语义元素的含义,我甚至无法找到正确的引用:
self._sensitive_ids = {xmr : self.parser.get_id(xmr) for xmr in self.sensitive}
现在这在我的python安装(V2.4)中不起作用。它说"语法错误:语法无效"
有人可以解释分配给LHS的内容,以及重写Python 2.4语句的正确方法吗?什么是" for"当它在行尾提到时,循环在这里循环?
顺便说一下,原始代码来自:vcd_parse
答案 0 :(得分:3)
正如其他人所说,这是一本词典理解,在2.7版本中不可用,直到版本2.7。
在Python 2.5及更高版本中,您可以在dict
构造函数中使用生成器表达式:
self._sensitive_ids = dict((xmr, self.parser.get_id(xmr)) for xmr in self.sensitive)
在Python 2.4中,您可以在dict
构造函数中使用列表推导:
self._sensitive_ids = dict([(xmr, self.parser.get_id(xmr)) for xmr in self.sensitive])
实际上,你可以也在Python 2.4中使用生成器表达式版本。我有点朦胧,因为我使用了2,4,所以有一段时间。 ;)
您可以在the official tutorial中阅读有关列表推导的内容。
答案 1 :(得分:1)
self._sensitive_ids = {xmr : self.parser.get_id(xmr) for xmr in self.sensitive}
相当于:
self._sensitive_ids = {}
for xmr in self.sensitive:
self._sensitive_ids[xmr] = self.parser.get_id(xmr)
答案 2 :(得分:1)
这是一种pythonic
行定义循环内部列表的方法。以下代码相同:
# normal way
sample_list = [1,2,10,12]
pythonic_list = []
for i in sample_list:
pythonic_list.append(i*2)
# pythonic way
sample_list = [1,2,10,12]
pythonic_list = [i*2 for i in sample_list]
在你的情况下:
self._sensitive_ids = {xmr : self.parser.get_id(xmr) for xmr in self.sensitive}
与:
相同self._sensitive_ids = {}
for xmr in self.sensitive:
self._sensitive_ids[xmr] = self.parser.get_id(xmr)
答案 3 :(得分:0)
字典理解将xmr
键映射到self.parser.get_id(xmr)
值;它从每个(key, value)
对构建字典:
(xmr
,self.parser.get_id(xmr))
对
self._sensitive_ids = {xmr1 : self.parser.get_id(xmr1), # for each xmr in self.sensitive, maps the corresponding parser value
xmr2 : self.parser.get_id(xmr2),
...}
答案 4 :(得分:0)
self.senstive
是对象的属性,它是xmr(s)的列表。
现在代码编写者想要创建一个字典,其中键为xmr(s),xmr(s)的id(s)值。
他这样做的方式被称为字典理解。
结束输出字典如下所示
{xmr_1 : xmr_id_1, xmr_2 : xmr_id_2,.....so on}