0

我正在尝试创建一个 for 循环,它将新条目添加到我的字典中,其格式应为 {1:0.5, 2:0.5, 3:0.5 ....}

我需要让它这样做200次。但由于某种原因,我的代码打印出一个空字典:

initial_dict = {}

for i in initial_dict.copy():
    if len(i) < 200:
        initial_dict.update({i: 0.5})


print initial_dict

有任何想法吗?

4

8 回答 8

2
>>> d = {}
>>> for i in range(1, 201):
...     d[i] = 0.5
... 
>>> d

或使用dict comprehensions的较短形式:

>>> { i: 0.5 for i in range(1, 201) }
于 2012-12-20T12:46:58.347 回答
1

使用 dict 理解:

initial_dict = {i:0.5 for i in range(1, 201)}
于 2012-12-20T12:47:05.163 回答
1

使用dict.fromkeys()

帮助dict.fromkeys()

dict.fromkeys(S[,v]) -> 新的字典,键来自 S,值等于 v。v 默认为 None。

dic=dict.fromkeys(range(1,201),0.5)

例子:

In [11]: dic=dict.fromkeys(range(1,10),0.5)

In [12]: dic
Out[12]: {1: 0.5, 2: 0.5, 3: 0.5, 4: 0.5, 5: 0.5, 6: 0.5, 7: 0.5, 8: 0.5, 9: 0.5}

dict.fromkeys()也比dict comprehension:

In [17]: %timeit { i: 0.5 for i in range(1, 201) }
10000 loops, best of 3: 35.8 us per loop

In [18]: %timeit dict.fromkeys(range(1,201),0.5)
10000 loops, best of 3: 21.6 us per loop
于 2012-12-20T12:47:45.213 回答
1
In [1]: dict.fromkeys(range(10), 0.5)
Out[1]: 
{0: 0.5,
 1: 0.5,
 2: 0.5,
 3: 0.5,
 4: 0.5,
 5: 0.5,
 6: 0.5,
 7: 0.5,
 8: 0.5,
 9: 0.5}

目前尚不清楚您是在构建这样的新字典,还是需要使用这些键/值更新现有字典。如果是后者,只需写:

initial_dict.update(dict.fromkeys(range(200), 0.5))
于 2012-12-20T12:47:50.173 回答
1

initial_dict是空的,所以我不明白您希望如何迭代它的副本。那个循环甚至永远不会进入。

如果你只想创建一个包含 1 到 200 键的字典,你可以这样做:

dict.fromkeys(xrange(1,201), 0.5)
于 2012-12-20T12:48:05.677 回答
1

你可以这样写:

initial_dict = {}
for i in range(1, 200): 
  initial_dict .setdefault(i, 0.5)  

部分缺少输出:

>>> initial_dict
{1: 0.5, 2: 0.5, 3: 0.5, 4: 0.5, 5: 0.5, 6: 0.5, 7: 0.5, 8: 0.5, 9: 0.5,  

第二种方式(更好):

>>> for i in range(1, 200):
...     initial_dict[i] = 0.5
于 2012-12-20T12:48:18.980 回答
0

对于 python 2.7 或 3.x 而不是循环,您可以将其放在一行中:

dct = {x: 0.5 for x in range(1, 201)}
于 2012-12-20T12:48:07.407 回答
0

最简单的方法:

my_dict = {}
for i in range(1, 201): # second argument is exclusive
   my_dict[i] = 0.5
于 2012-12-20T13:19:55.553 回答