将字符串中的每个字符转换为字典键
假设我有一个字符串"abcdefghijklmnopqrstuvwxyz"
,我想用这些值初始化字典键。将字符串中的每个字符转换为字典键
alphabet = 'abcdefghijklmnopqrstuvwxyz'
alphabetDict = dict()
for char in alphabet:
alphabetDict[char] = 0
有没有更好的方法呢?
做,在一行中您可以使用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 [,值])
使用来自seq的值和值设置为value的键创建一个新字典。
fromkeys()
是一种返回新字典的类方法。值默认为None
。
请注意,你不应该使用这个,如果value
是可变的东西像list
或其他dict
等。当你调用该方法fromkeys()
值仅evaluted一次,所有的键指向同一个对象。
你可以使用这个恒定类型的值一样int
,str
等
而且,你不需要指定s
或alphabet
字符串,可以改用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}
感谢拉胡尔,这一个也好啊。 – user1767754
试用另一种方法。
dict(zip(alphabets, '0'*len(alphabets)))
http://stackoverflow.com/questions/1747817/python-create-a-dictionary-with-list-comprehension –