假设我有字典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方法来做到这一点吗?
答案 0 :(得分:22)
您可以使用dict comprehensions(python 2.7 +):
>>> v = 12
>>> d = {k:v for k in 'abfhp'}
>>> print d
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
答案 1 :(得分:9)
如何使用所需的键和默认值创建新词典?检查fromkeys方法。
>>> value=12
>>> a=dict.fromkeys(['a', 'b', 'f', 'h', 'p'], value)
>>> print a
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
答案 2 :(得分:2)
>>> a=dict(zip('abfhp',[12]*len('abfhp')))
>>> a
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
答案 3 :(得分:1)
a = dict()
for key in keys:
a[key] = value
答案 4 :(得分:0)
正如stummjr所指出的,词典理解对于理解和使用是有用的,特别是因为python中的所有东西都是一个dicitonary。
另一种可以考虑解决此问题的方法是使用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]