创建具有相同值的字典

时间:2012-08-15 21:37:02

标签: python dictionary

假设我有字典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方法来做到这一点吗?

5 个答案:

答案 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]