2015-09-28 152 views
6

假設我有一個字符串"abcdefghijklmnopqrstuvwxyz",我想用這些值初始化字典鍵。將字符串中的每個字符轉換爲字典鍵

alphabet = 'abcdefghijklmnopqrstuvwxyz' 

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

有沒有更好的方法呢?

+0

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

回答

11

做,在一行中您可以使用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} 
4

您可以在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] 

將所有的按鍵映射相同的列表。

2

是的,你可以使用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

0

試用另一種方法。

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