10

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

4

5 回答 5

26

您可以使用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}
于 2012-08-15T21:40:06.083 回答
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}
于 2012-08-15T21:40:53.420 回答
2
>>> a=dict(zip('abfhp',[12]*len('abfhp')))
>>> a
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
于 2012-08-15T21:52:09.853 回答
1
a = dict()
for key in keys:
    a[key] = value
于 2012-08-15T21:40:04.153 回答
0

正如 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]
于 2012-08-21T02:39:57.147 回答