2015-10-03 50 views
3

我最近开始学习python,所以我相信很多事情我不知道,可能很容易解决。但是,通过搜索很多问题我找不到答案。在字典理解语句中迭代

是否有可能在字典理解陈述中迭代变量?

在寻找一个答案,我发现这一点:

{ _key : _value(_key) for _key in _container } 

至极,现在我知道,是修真内循环的方式,但对于这个工作对我来说,我需要能够迭代'_container'中每个'_key'的值。

对于一个非常基本的例子:

alphabet = 'abcdefghijklmnopqrstuvwxyz' 

x = 1 

alpha_numbers = {char : x for char in alphabet} 

我想的 'x' 是 'X + = 1' 在 '字母' 容器中的每个 '字符'。但是我尝试迭代它的每一种方式,在字典理解中,都会返回一个'Invalid Syntax'错误。

那么,有可能吗?或者有更好的方法来做到这一点?

在此先感谢。

回答

1

对于这种情况,请特别考虑使用索引: {alphabet[i]:i+1 for i in range(len(alphabet))}

也就是说,你不能更新列表中的变量,设置或字典理解。如果您想这样做,请使用正常for循环或while循环并在该循环内添加dictionary[key] = value

3

您可以使用dictenumerate传递x作为起始值:

alphabet = 'abcdefghijklmnopqrstuvwxyz' 

dct = dict(enumerate(alpahbet, x)) # start=x i.e 1 

演示:

In [43]: print dict(enumerate(alphabet,1)) 
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e', 6: 'f', 7: 'g', 8: 'h', 9: 'i', 10: 'j', 11: 'k', 12: 'l', 13: 'm', 14: 'n', 15: 'o', 16: 'p', 17: 'q', 18: 'r', 19: 's', 20: 't', 21: 'u', 22: 'v', 23: 'w', 24: 'x', 25: 'y', 26: 'z'} 

或者使用带有字典补偿列举:

dct = {i:k for i,k in enumerate(alphabet,x)} 

要获得作为键的字母颠倒了我和K:

dct = {k:i for i,k in enumerate(alphabet,x)} 

或者使用itertools.countdictzip

from itertools import count 
dct = dict(zip(alphabet, count(x))) 

或者rangelenzip

dct = dict(zip(alphabet, range(x, len(alphabet)+x))) 
+0

但@Padraic在这种情况下,密钥将是数,我需要的是相反的。 但是,以任何方式,我不知道'.enumerate()'模块。 – hBler

+1

@hBler,然后'{k:我为i,k在枚举(字母,x)}'',你可以把你想要的任何顺序 –