是否有类似附加词典的方法

时间:2013-12-20 19:20:38

标签: python dictionary

如何在python中为字典添加键值? 我定义了一个空字典,现在我想从列表中传递一堆键并将它们的值设置为1.从我所做的它创建我每次迭代一个新的字典,但我想追加键,值所以最终我只会收到一本字典。 这是我的代码:

def count_d(words):
    count_dict={} 
    words_set= set(words)
    for i in words_set:
        count_dict[i]= 1
        print (count_dict)

3 个答案:

答案 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.updatedict.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_dictwords_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在这种情况下更有意义,尽管你的名字是变量。)

但我认为这是你实际上正在努力的部分。