我,我最近开始学习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'。但是,在字典理解中,我尝试迭代它的每一种方式都会返回“无效语法”错误。
那么,有可能吗?或者有更好的方法来制作它?
提前致谢。
答案 0 :(得分:5)
您可以使用dict
和enumerate
传递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.count
与dict
和zip
一起使用:
from itertools import count
dct = dict(zip(alphabet, count(x)))
或range
,len
和zip
:
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
。