如何同时为字典赋值?

时间:2015-07-21 03:02:51

标签: python python-2.7 dictionary

当我有一个现有字典时,我想同时为它分配值。

示例:

这是关于字典的样本。

people_list = {
    "Tom": None,
    "David": None,
    "Traivs": None,
}

我希望每个键:值对具有相同的值。

这是我想要的结果。

people_list = {
    "Tom": "hello",
    "David": "hello",
    "Traivs": "hello",
}

除了循环语句,我该如何解决?

5 个答案:

答案 0 :(得分:4)

一行:

people_list.update(dict.fromkeys(people_list.keys(),"hello"))

答案 1 :(得分:3)

In [3]: {key: 'hello' for key in people_list}
Out[3]: {'David': 'hello', 'Tom': 'hello', 'Traivs': 'hello'}

与@Paul的解决方案进行时间比较:

In [12]: d = dict(zip(range(1, 10000), range(10000,1)))

In [13]: %timeit d2 = {key: 'hello' for key in d}
1000000 loops, best of 3: 240 ns per loop

In [14]: %timeit d.update(dict.fromkeys(d.keys(),"hello"))
1000000 loops, best of 3: 844 ns per loop

答案 2 :(得分:2)

它在技术上仍然是一个循环,但你可以使用迭代器:

new_value = None
dict(map(lambda (k,v): (k, new_value), people_list.iteritems()))

答案 3 :(得分:1)

如果您想要一个具有相同值的字典,也可以使用defaultdict

>>> from collections import defaultdict
>>> people_list = defaultdict(lambda: "hello")
>>> print people_list["Tom"]
'hello'
>>> print people_list["Davis"]
'hello'
>>> print people_list["Travis"]
'hello'

按需创建键/值对。

答案 4 :(得分:1)

没有神奇的方法可以按照您请求的方式同时设置字典中的所有不可变值,而不会在某种程度上进行某种形式的迭代。

可能最接近的是使用dict.fromkeys()

people_list = dict.fromkeys(people_list, 'hello')

当然,迭代仍在fromkeys()内发生。

如果您对间接级别感到满意,则可以使用具有可变值的字典,例如:列表,并立即更新所有这些:

>>> v = [None]
>>> d = {k:v for k in ['Tom', 'David', 'Traivis']}
>>> print d
{'David': [None], 'Traivis': [None], 'Tom': [None]}
>>> v[0] = 'hello'
>>> print d
{'David': ['hello'], 'Traivis': ['hello'], 'Tom': ['hello']}

这里没有循环,但缺点是必须提取值:

>>> d['Tom']
['hello']
>>> d['Tom'][0]
'hello'