将字符串中的每个字符转换为字典键

问题描述:

假设我有一个字符串"abcdefghijklmnopqrstuvwxyz",我想用这些值初始化字典键。将字符串中的每个字符转换为字典键

alphabet = 'abcdefghijklmnopqrstuvwxyz' 

alphabetDict = dict() 
for char in alphabet: 
    alphabetDict[char] = 0 

有没有更好的方法呢?

+0

http://*.com/questions/1747817/python-create-a-dictionary-with-list-comprehension –

做,在一行中您可以使用dict.fromkeys()方法 -

>>> s = 'abcdefghijklmnopqrstuvwxyz' 
>>> alphaDict = dict.fromkeys(s,0) 
>>> alphaDict 
{'m': 0, 'p': 0, 'i': 0, 'n': 0, 'd': 0, 'w': 0, 'k': 0, 'y': 0, 's': 0, 'b': 0, 'h': 0, 't': 0, 'u': 0, 'q': 0, 'g': 0, 'l': 0, 'e': 0, 'a': 0, 'j': 0, 'c': 0, 'o': 0, 'f': 0, 'v': 0, 'x': 0, 'z': 0, 'r': 0} 

documentation -

fromkeys(SEQ [,值])

使用来自seq的值和值设置为value的键创建一个新字典。

fromkeys()是一种返回新字典的类方法。值默认为None

请注意,你不应该使用这个,如果value是可变的东西像list或其他dict等。当你调用该方法fromkeys()值仅evaluted一次,所有的键指向同一个对象。

你可以使用这个恒定类型的值一样intstr


而且,你不需要指定salphabet字符串,可以改用string.ascii_lowercase。示例 -

>>> import string 
>>> alphaDict = dict.fromkeys(string.ascii_lowercase,0) 
>>> alphaDict 
{'m': 0, 'p': 0, 'i': 0, 'n': 0, 'd': 0, 'w': 0, 'k': 0, 'y': 0, 's': 0, 'b': 0, 'h': 0, 't': 0, 'u': 0, 'q': 0, 'g': 0, 'l': 0, 'e': 0, 'a': 0, 'j': 0, 'c': 0, 'o': 0, 'f': 0, 'v': 0, 'x': 0, 'z': 0, 'r': 0} 

您可以在Python中使用字典解析。

alphabetDict = {char: 0 for char in alphabet} 

Dictionaries(Python文档)

有这个答案和阿南德的上方之间微小的差别。 Dict理解评估每个键的价值,而fromkeys只做一次。如果你使用像int这样的东西,这没有问题。但是,如果你做

d = {key: [] for key in <some set>} 
d[3].append(5) 
print(d[2]) 

给你

[] 

,你有不同的名单,而

d = dict.fromkeys(<some set>, []) 
d[3].append(5) 
print(d[2]) 

给你

[5] 

将所有的按键映射相同的列表。

是的,你可以使用dictionary comprehensions.

In [1]: alphabet = 'abcdefghijklmnopqrstuvwxyz' 

In [2]: {x:0 for x in alphabet} # dictionary comprehension 
Out[2]: 
{'a': 0, 
'b': 0, 
'c': 0, 
'd': 0, 
'e': 0, 
'f': 0, 
'g': 0, 
'h': 0, 
'i': 0, 
'j': 0, 
'k': 0, 
'l': 0, 
'm': 0, 
'n': 0, 
'o': 0, 
'p': 0, 
'q': 0, 
'r': 0, 
's': 0, 
't': 0, 
'u': 0, 
'v': 0, 
'w': 0, 
'x': 0, 
'y': 0, 
'z': 0} 
+1

感谢拉胡尔,这一个也好啊。 – user1767754

试用另一种方法。

dict(zip(alphabets, '0'*len(alphabets)))