Python字典创建语法

Fal*_*rri 48 python syntax dictionary

我想知道是否有任何方法来填充字典,以便您有多个键映射到相同的值,而不是说:

d = {1:'yes', 2:'yes', 3:'yes', 4:'no'}
Run Code Online (Sandbox Code Playgroud)

我正在考虑以下几点:

d = {*(1,2,3):'yes', 4:'no'}
Run Code Online (Sandbox Code Playgroud)

这显然是语法错误.

有没有一个相当简单的方法可以做到这一点,没有太多的混淆?(我不打代码高尔夫,但我也不需要反复写同样的东西.但是,任何与代码高尔夫相关的答案都会受到赞赏,因为代码高尔夫很棒=]).

编辑:

我可能选了一个坏榜样.这就是我想要做的:

d = {*('READY', 95): 'GPLR2_95', 'CHARGING': 'GPLR3_99', 'PROTECTION': 'GPLR3_100', 'CONNECTED': 'GPLR3_101', 'ERROR':'GPLR3_102'}
Run Code Online (Sandbox Code Playgroud)

我期望它扩展到的是:

d = {'READY':'GPLR2_95', 95: 'GPLR2_95', ...}
Run Code Online (Sandbox Code Playgroud)

编辑 - >编辑:

我知道这是愚蠢的,完全没必要,但我的目标是在一条线上做出这个声明.这显然不应该限制任何响应和编写代码只是因为它适合1行是愚蠢的.但是我正在编写一个模块级别的常量字典,如果它是单个衬里那将会很好.

Tim*_*ker 69

你可以把它转过来:

>>> d1 = {"yes": [1,2,3], "no": [4]}
Run Code Online (Sandbox Code Playgroud)

然后"反转"那个字典:

>>> d2 = {value:key for key in d1 for value in d1[key]}
>>> d2
{1: 'yes', 2: 'yes', 3: 'yes', 4: 'no'}
Run Code Online (Sandbox Code Playgroud)

  • Augh.你正在做所有这些,以避免几次重复"是"?好吧,它在代码高尔夫意义上很可爱,但是代码高尔夫也是有害的. (5认同)
  • 我同意这不是很好.聪明,也许,但不是很漂亮.我的第一个解决方案是一个小帮助函数(具有嵌套的,可读的'for'循环).但他想要一个单行,所以我给了他一个.不是我在自己的代码中这样做 - 嵌套的字典理解通常很难阅读. (4认同)
  • 我对可读性的担心并不是关于嵌套字典理解,而是关于反转和转换刚刚定义的字典引起的混乱.如果我正在阅读代码,我可能会错过反转,或者注意它,并想知道它的用途是什么. (2认同)

Cha*_*tin 8

怎么样:

501 $ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = {"q":1}
>>> print a
{'q': 1}
>>> a["q"]
1
>>> a["r"] = a["s"] = a["t"] = 2
>>> a
{'q': 1, 's': 2, 'r': 2, 't': 2}
>>> 
Run Code Online (Sandbox Code Playgroud)