假设我有字典a = {}
,我想得到这样的结果
value = 12
a = {'a':value,'b':value,'f':value,'h':value,'p':value}
等等很多keys:same value
。现在我当然可以这样做
a.update({'a':value})
a.update({'b':value})
等等....但是由于所有键的值都相同,我们难道没有更 Pythonic 的方法来做到这一点吗?
假设我有字典a = {}
,我想得到这样的结果
value = 12
a = {'a':value,'b':value,'f':value,'h':value,'p':value}
等等很多keys:same value
。现在我当然可以这样做
a.update({'a':value})
a.update({'b':value})
等等....但是由于所有键的值都相同,我们难道没有更 Pythonic 的方法来做到这一点吗?
您可以使用dict 理解(python 2.7+):
>>> v = 12
>>> d = {k:v for k in 'abfhp'}
>>> print d
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
如何使用您想要的键和默认值创建一个新字典?检查fromkeys方法。
>>> value=12
>>> a=dict.fromkeys(['a', 'b', 'f', 'h', 'p'], value)
>>> print a
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
>>> a=dict(zip('abfhp',[12]*len('abfhp')))
>>> a
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
a = dict()
for key in keys:
a[key] = value
正如 stummjr 所指出的,字典理解对理解和使用很有用,尤其是因为 python 中的所有内容都是字典。
您可以考虑解决此问题的另一种方法是使用 lambda 函数。
makeDict = lambda keys, values: { k:v for k, v in zip(keys, values) }
makeDict( [1,2,3], list('abc') )
['a': 1, 'c': 3, 'b': 2]
如果这增加了任何清晰度,这就是 makeDict 看起来被重写为常规函数的内容。
def makeDict(keys, values):
return { k:v for k, v in zip(keys, values) }
无论如何,lambdas 可以玩起来很有趣,这也不是最强大的例子。使用 zip 可能会丢失数据。两个序列的长度必须相同才能正常工作。Python 将遍历,直到它有对来匹配两个序列。以下示例中的额外元素不应出现在字典中。
{ k:v for k, v in zip( list('abc'), [1,2,3,4]) }
['a': 1, 'c': 3, 'b': 2]