Python中的ES6计算属性名称

时间:2017-09-03 16:35:43

标签: python dictionary syntax

我正在尝试在Python中找到一个等效的ES6功能。

在JS中,我有类似的东西:

let obj = {['composed' + objKey()]: true}

我希望能够在Python中的dict构造函数中编写字典键,例如:

MyClass.render(storyboard=dict([getAuthor()]=self.authorStoryData()))

[getAuthor()]应该生成该函数返回值的字典键。或者,如果它是可变的,它的价值等......

有没有在Python中这样做?

我已经尝试过做dict=('%s' % (variable,)=self.content但是却犯了错误。

1 个答案:

答案 0 :(得分:3)

就像在JavaScript中使用对象文字一样,您应该在Python中使用字典文字。这将是Python中的完全等价物:

def objKey():
   return 'foo'

obj = {
    'composed' + objKey(): True
}

print(obj['composedfoo']) # True

或者在您的实际案例中:

MyClass.render(storyboard={ getAuthor(): self.authorStoryData() })

正如Jon在评论中强调的那样,JavaScript对象文字和Python字典文字之间的最大区别在于,Python的键行为基本上是JavaScript默认情况下[]的行为。

因此,要在JavaScript中翻译{ [expr]: value },您需要在Python中编写{ expr: value }。但是当你在JavaScript中编写{ key: value }时,你必须理解它本质上是{ ['key']: value },这使它等同于Python中的{ 'key': value }

你需要一个字符串文字用于字符串键的原因很简单,因为Python字典几乎可以有任意键对象,并且不限于JavaScript对象的字符串键。