有没有一种方法可以将字典中所有的值都设置为零?

4
例如,我有一个ASCII字符列表,并希望将它们与由等于ASCII列表中字符数的零组成的列表进行压缩,如下所示:
    import string

    a = string.printable
    #Gives all ASCII characters as a list ^
    b = zeroes * len(a)
    c = zip(a,b)

像这样的东西吗?

(注:保留了HTML标签)

3
所以,你需要一个元组列表还是一个字典? - bereal
5个回答

11
你可以使用字典推导式:

你可以使用字典推导式:

{ x:0 for x in string.printable}

1
这是Python 3.x独有的,至少在2.6版本中会引发语法错误(不确定2.7版本如何)。 - GSP
1
你是正确的,它在Python 2.6中不起作用,但在Python 2.7中可以正常工作。"Python 2.7 中新增了字典推导式" - Mark Byers
谢谢,这是一个优雅的解决方案。那我接下来的问题就是,如果我需要一个if语句来统计列表中ASCII字符的存在,那么我能否为每个匹配到的字符在我创建的ASCIIDict中添加1? - Austin
@Austin:你考虑过Tim的答案了吗?https://dev59.com/-GvXa4cB1Zd3GeqPGiwT#13508872 - Mark Byers
我在我的情况下使用了dict(zip(items, [0 for _ in items]))。我知道一定有更好的方法来完成它。 - Jacklynn

8

有一个标准的方法:

mydict = dict.fromkeys(string.printable, 0)

或者,如果你需要一个元组列表(说实话,Martijn的版本更符合Pythonic风格,但为了多样性):
import itertools
tuples = zip(string.printable, itertools.repeat(0))

2

只需使用列表推导式:

c = [(i, 0) for i in a]

这是一个元组列表,不是字典。如果我对Python了解得没错的话,那么你需要将其转换为字典:dict([(i, 0) for i in a]) - Jacklynn
1
@Jack:这个问题不太明确,他们到底想要什么。如果只是要字典输出,可以使用dict.fromkeys()(速度非常快)。 - Martijn Pieters

1

这可能对你没有帮助,但如果你要使用字典进行计数,可以使用defaultdict

from collections import defaultdict
my_dict = defaultdict(int)

任何键都默认设置为0。

>>> print my_dict['a']
    0

0

如果你需要一个列表,可以尝试这样:

import string
c = zip(string.printable, [0]*len(string.printable))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接