Python 如何同时为字典赋值?

Python 如何同时为字典赋值?,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,当我有一个现有的字典时,我想同时给它赋值 例如: 这是一本关于词典的范例 people_list = { "Tom": None, "David": None, "Traivs": None, } 我希望每个key:value对都有相同的值 这是我想要的结果 people_list = { "Tom": "hello", "David": "hello", "Traivs": "hello", } 除了循环语句,我该如何解决它?一行: peop

当我有一个现有的字典时,我想同时给它赋值

例如:

这是一本关于词典的范例

people_list = {
    "Tom": None,
    "David": None,
    "Traivs": None,
}
我希望每个key:value对都有相同的值

这是我想要的结果

people_list = {
    "Tom": "hello",
    "David": "hello",
    "Traivs": "hello",
}
除了循环语句,我该如何解决它?

一行:

people_list.update(dict.fromkeys(people_list.keys(),"hello"))
一行:

people_list.update(dict.fromkeys(people_list.keys(),"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
与@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

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

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

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

new_value = None
dict(map(lambda (k,v): (k, new_value), people_list.iteritems()))
如果需要具有相同值的词典,也可以使用:

>>> from collections import defaultdict
>>> people_list = defaultdict(lambda: "hello")
>>> print people_list["Tom"]
'hello'
>>> print people_list["Davis"]
'hello'
>>> print people_list["Travis"]
'hello'
键/值对是按需创建的。

如果需要具有相同值的词典,也可以使用:

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

键/值对是按需创建的。

没有神奇的方法可以以您请求的方式同时设置字典中的所有不可变值,而不会在某个级别发生某种形式的迭代

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

当然,尽管迭代仍在
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'

没有神奇的方法可以按照您请求的方式同时设置字典中的所有不可变值,而不会在某个级别上发生某种形式的迭代

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

当然,尽管迭代仍在
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'

仅供参考,此方法比其他两种方法(每个循环944 ns)慢得多。我尝试在没有任何循环语句的情况下进行此操作,但了解此信息很好。啊,这是真的。那里没有环路。很好。仅供参考,这种方法比其他两种方法(每个循环944 ns)慢得多。我尝试在没有任何循环语句的情况下使用这种方法,但是知道这些信息很好。啊,这是真的。那里没有环路。很好。你的电脑一定比我的快P@nivixzixer先生,您应该买个mac电脑。:-)不需要添加
.keys()
(在Python 2中,它具体化了列表)。d上的迭代就是按键上的迭代。Mac电脑不一定快。你的电脑一定比我的快P@nivixzixer先生,您应该买个mac电脑。:-)不需要添加
.keys()
(在Python 2中,它具体化了列表)。迭代在
d
上就是迭代在按键上。Mac不一定像这个答案那样快。它是如此清晰易懂。我喜欢这个答案。它是如此清晰易懂。