使用同一词典中的另一个值声明词典?

2024-09-29 01:35:26 发布

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

我正在使用python尝试基本上做到这一点:

myDict = {"key1" : 1, "key2" : myDict["key1"]+1}

…如果你明白我的意思。可以不使用多个语句吗?你知道吗

编辑:还有,如果有人能告诉我一个更好的方式来更清楚地表达这个问题,那就太酷了。我真的不知道该怎么表达我的要求。你知道吗

EDIT2:似乎有些混乱-是的,它比“key2”更复杂:1+1,我所做的主要是为了代码的可读性,因为如果我必须2行的话,它会变得混乱。你知道吗

这里有一个更准确的代码示例,我正在尝试做什么…尽管它仍然没有它得到的那么复杂:p

lvls={easy:  {mapsize:(10,10), winPos:(mapsize[0]-1,mapsize[1]-1)},
      medium:{mapsize:(15,15), winPos:(mapsize[0]-RANDOMINT,mapsize[1]-1)},
      hard:  {mapsize:(20,20), winPos:(mapsize[0]-RANDOMINT,mapsize[1]-RANDOMINT)}
     }

Tags: 代码编辑示例easy方式语句mydictkey2
3条回答

不使用多个语句是不可能的,至少不使用问题语句中的某些方法。但有一点,用听写理解法:

>>> myDict = {"key" + str(key): value for (key, value) in enumerate(range(7))}
>>> myDict
{'key0': 0,
 'key1': 1,
 'key2': 2,
 'key3': 3,
 'key4': 4,
 'key5': 5,
 'key6': 6}

当然这些都不整齐,但它们都在那里。你知道吗

不,如果不使用多个语句,这通常是不可能的。你知道吗

在这种特殊的情况下,你可以用一种很难理解的方式来解决它。例如:

myDict = dict(zip(("key1", "key2"), itertools.count(1))

然而,只有当您想要指定一个单一的开始值时,这才有效,其他的一切都是连续的,并且可能这对于您想要的还不够一般。你知道吗

如果你经常做这类事情,你可以把这些多个语句包装成一个适当的通用函数,这样每个特定的实例就是一个表达式。例如:

def make_funky_dict(*args):
    myDict = {}
    for key, value in zip(*[iter(a)]*2):
        if value in myDict:
            value = myDict[value] + 1
        myDict[key] = value
    return myDict

myDict = make_funky_dict("key1", 1, "key2", "key1")

但实际上,这里没有充分的理由不使用多个语句,而且可能会更清楚,所以…我就这样做。你知道吗

您尝试使用的唯一变量是整数。一个很好的函数如何:

def makelevel(size,jitterfunc=lambda:0):
    return {'mapsize':(size,size), 'winPos':(size-1+jitterfunc(),size-1+jitterfunc())}

lvls = {hardness,makelevel(size) for hardness, size in [('easy',10),('medium',15), ('hard',20)]}

当然,这个函数看起来有点像构造函数。也许你应该用物体?你知道吗

相关问题 更多 >