迭代字典理解陈述

时间:2015-10-03 00:53:23

标签: python dictionary dictionary-comprehension

我,我最近开始学习python,所以我确信很多我不知道的事情可能很难解决。但是,在搜索很多问题时,我无法找到答案。

是否可以在字典理解语句中迭代变量?

在寻找答案时我发现了这个:

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

我现在知道,这是一种在理解中循环的方法,但为了让我能够工作,我需要能够为'_container'中的每个'_key'迭代值。

一个非常基本的例子:

alphabet = 'abcdefghijklmnopqrstuvwxyz'

x = 1

alpha_numbers = {char : x for char in alphabet}

对于'alphabet'容器中的每个'char',我希望'x'为'x + = 1'。但是,在字典理解中,我尝试迭代它的每一种方式都会返回“无效语法”错误。

那么,有可能吗?或者有更好的方法来制作它?

提前致谢。

2 个答案:

答案 0 :(得分:5)

您可以使用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'}

或者使用带有dict comp的枚举:

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

要使字母按键反转i和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)))

答案 1 :(得分:1)

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

也就是说,您无法更新列表,集合或字典理解中的变量。如果您愿意这样做,请使用普通的for循环或while循环,并在该循环中添加dictionary[key] = value