假设我有一个字符串"abcdefghijklmnopqrstuvwxyz"
,我想用这些值初始化字典键。
alphabet = 'abcdefghijklmnopqrstuvwxyz'
alphabetDict = dict()
for char in alphabet:
alphabetDict[char] = 0
有更好的方法吗?
答案 0 :(得分:12)
您可以使用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}
fromkeys(seq [,value])
使用seq中的键创建一个新字典,并将值设置为value。
fromkeys()
是一个返回新字典的类方法。值默认为None
。
请注意,如果value
像list
或其他dict
等可变,则不应使用此功能。因为该值仅在您调用方法{{{ 1}},所有键都指向同一个对象。
您可以将此不可变类型用作fromkeys()
,int
等值。
此外,您无需指定str
或s
字符串,而是可以使用string.ascii_lowercase
。示例 -
alphabet
答案 1 :(得分:5)
您可以在Python中使用字典理解。
submit
Dictionaries(Python文档)
这个答案与上面的Anand之间存在细微差别。 Dict comprehensions评估每个键的值,而alphabetDict = {char: 0 for char in alphabet}
只执行一次。如果你正在使用像int这样的东西,这没有任何问题。但是,如果你这样做
fromkeys
给你
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])
会将所有键映射到同一列表。
答案 2 :(得分:2)
是的,您可以使用dictionary comprehensions.
在一行中执行此操作mysql.server start
答案 3 :(得分:0)
尝试了另一种方法。
dict(zip(alphabets, '0'*len(alphabets)))
答案 4 :(得分:0)
如果您需要一个具有不同值而不是恒定值的字典,则可以使用随机模块创建如下所示的字典:
>>> import random
>>> alphabet = 'abcdefghijklmnopqrstuvwxyz'
>>> my_dict = dict([ (ch, random.randint(1,len(alphabet)) ) for ch in alphabet ] )
>>> my_dict
{'a': 17, 'b': 15, 'c': 3, 'd': 5, 'e': 5, 'f': 13, 'g': 7, 'h': 1, 'i': 3, 'j': 12, 'k': 11, 'l': 7, 'm': 8, 'n': 23, 'o': 15, 'p': 7, 'q': 9, 'r': 19, 's': 17, 't': 22, 'u': 20, 'v': 24, 'w': 26, 'x': 14, 'y': 7, 'z': 24}
>>>
当我需要带有随机值的字典以进行测试时,我会创建上述字典。
创建字典的另一种方法是用字符计数的文本的每个字符。
>>> char_count = lambda text, char: text.count(char)
>>> text = "Genesis 1 - 1 In the beginning God created the heavens and the earth. 2 Now the earth was formless and desolate, and there was darkness upon the surface of the watery deep, and God's active force was moving about over the surface of the waters."
>>> my_dict = dict( [ ( char, char_count(text, char) ) for char in text ] )
>>> my_dict
{'G': 3, 'e': 32, 'n': 13, 's': 15, 'i': 5, ' ': 45, '1': 2, '-': 1, 'I': 1, 't': 17, 'h': 12, 'b': 2, 'g': 3, 'o': 12, 'd': 10, 'c': 5, 'r': 12, 'a': 19, 'v': 4, '.': 2, '2': 1, 'N': 1, 'w': 6, 'f': 6, 'm': 2, 'l': 2, ',': 2, 'k': 1, 'u': 4, 'p': 2, 'y': 1, "'": 1}
说明:
1. lambda函数计算一个字符的出现次数。
2.为文本中的每个字符调用lambda函数,以获取该特定字符的计数。
注意:您可以改进此代码,以避免重复调用重复的字符。
使用字典理解可能比上面的要容易:
{ char:(text.count(char)) for char in text }
答案 5 :(得分:0)
为了避免@Robert Ranjan提到的重复,我们采用这种方式
>>> char_count = lambda text, char: text.count(char)
>>> alphabet = 'abcdefghijklmnopqrstuvwxyz'
>>> text = "Genesis 1 - 1 In the beginning God created the heavens and the earth. 2 Now the earth was formless and desolate, and there was darkness upon the surface of the watery deep, and God's active force was moving about over the surface of the waters."
>>> my_dict = dict( [ ( char, char_count(text, char) ) for char in alphabet] )
>>> my_dict
{'a': 19, 'b': 2, 'c': 5, 'd': 10, 'e': 32, 'f': 6, 'g': 3, 'h': 12, 'i': 5, 'j': 0, 'k': 1, 'l': 2, 'm': 2, 'n': 13, 'o': 12, 'p': 2, 'q': 0, 'r': 12, 's': 15, 't': 17, 'u': 4, 'v': 4, 'w': 6, 'x': 0, 'y': 1, 'z': 0}
>>>