如何在python中为字典添加键值? 我定义了一个空字典,现在我想从列表中传递一堆键并将它们的值设置为1.从我所做的它创建我每次迭代一个新的字典,但我想追加键,值所以最终我只会收到一本字典。 这是我的代码:
def count_d(words):
count_dict={}
words_set= set(words)
for i in words_set:
count_dict[i]= 1
print (count_dict)
答案 0 :(得分:4)
您要找的是dict.fromkeys以及dict.update。
来自文档
使用seq中的键创建一个新字典,并将值设置为value。
使用示例
>>> d = {}
>>> d.update(dict.fromkeys(range(10), 1))
>>> d
{0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1}
注意,您需要dict.update
和dict.fromkeys
,以便就地更新字典
相反,如果你想创建一个字典并分配使用符号
>>> d = dict.fromkeys(range(10), 1)
>>> d
{0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1}
不幸的是,对于就地更新,您需要在传递给dict.update
方法之前创建一个丢弃字典。一种非直观的方法是利用itertools
from itertools import izip, repeat
d.update(izip(xrange(10), repeat(1)))
同样的想法可以扩展到经常使用的OrderedDict,作为OrderedSet
的替代,因为标准库没有提供。{/ p>
答案 1 :(得分:2)
fromkeys
方法可以满足您的需求:
count_dict = dict.fromkeys(words_set, 1)
这会从count_dict
为words_set
提供密钥,每个密钥的值为1.
有关fromkeys
here
答案 2 :(得分:1)
如何在python中为字典添加键值?
正如你一样:
count_dict[i] = 1
从我的所作所为它创造了我每次迭代一个新词典
不,不。它不断追加到同一个迭代。问题是你每次迭代都要打印字典。
所以,你非常接近你想要的。我相信你想要做的就是取消print
语句,所以它只在结束时发生一次,而不是每次都在循环中发生:
def count_d(words):
count_dict={}
words_set= set(words)
for i in words_set:
count_dict[i]= 1
print (count_dict)
当然它对return count_dict
可能更有用,而不是打印它。 Abhijit的答案显示了一种更简单的方法。 (另一种简单的方法:count_dict = dict(collections.Counter(words_set))
。但我认为dict.from_keys
在这种情况下更有意义,尽管你的名字是变量。)
但我认为这是你实际上正在努力的部分。