Python字典创建语法

2024-05-18 06:53:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有任何方法可以填充一个字典,使您有多个键映射到同一个值,而这个值的详细程度比说:

d = {1:'yes', 2:'yes', 3:'yes', 4:'no'}

我的想法是:

d = {*(1,2,3):'yes', 4:'no'}

这显然是一个语法错误。

有没有一种相当简单的方法可以做到这一点而不会造成太多混淆?(我不玩代码高尔夫,但我也不需要一遍又一遍地写本质上相同的东西。不过,任何与代码高尔夫相关的答案也会很感激,因为代码高尔夫是令人敬畏的。

编辑

我可能选了个坏例子。这就是我要做的:

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

我希望这会扩展到:

d = {'READY':'GPLR2_95', 95: 'GPLR2_95', ...}

编辑->;编辑

我知道这是愚蠢的和完全没有必要的,但我的目标是在一行声明。显然,这不应该限制任何响应和编写代码,因为它只适合一行是愚蠢的。但是我正在写一个模块级的常量dict,如果它是一个单独的行程序就好了。


Tags: 方法no答案代码编辑字典例子yes
3条回答

打高尔夫?

yesindices = [1,2,3,22,34,33]
noindices = [4,8,9]
dict (zip(yesindices, ['yes' for i in yesindices]) + zip(noindices, ['no' for i in noindices]))

收益率

{1: 'yes', 2: 'yes', 3: 'yes', 4: 'no', 33: 'yes', 8: 'no', 9: 'no', 34: 'yes', 22: 'yes'}

怎么样:

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}
>>> 

你可以把它转过来:

>>> d1 = {"yes": [1,2,3], "no": [4]}

然后“反转”那本字典:

>>> d2 = {value:key for key in d1 for value in d1[key]}
>>> d2
{1: 'yes', 2: 'yes', 3: 'yes', 4: 'no'}

相关问题 更多 >