在python中,是否可以使用单个命令更新或初始化字典键?

时间:2011-09-02 07:57:39

标签: python dictionary

例如,假设我想建立一个直方图,我会这样:

hist = {}
for entry in data:
    if entry["location"] in hist:
        hist[entry["location"]] += 1
    else:
        hist[entry["location"]] = 1

有没有办法避免存在检查并根据其存在来初始化或更新密钥?

4 个答案:

答案 0 :(得分:19)

您想要的是defaultdict

from collections import defaultdict
hist = defaultdict(int)
for entry in data:
    hist[entry["location"]] += 1

defaultdict default-构造dict中尚不存在的任何条目,因此对于int,它们从0开始,你只需为每个项添加一个。

答案 1 :(得分:11)

是的,你可以这样做:

hist[entry["location"]] = hist.get(entry["location"], 0) + 1

对于引用类型,您通常可以使用setdefault来实现此目的,但如果dict的右侧只是一个整数,则不适用。

Update( hist.setdefault( entry["location"], MakeNewEntry() ) )

答案 2 :(得分:6)

我知道你已经接受了答案但是你知道,自从Python 2.7以来,还有Counter模块,这是明确针对这种情况制作的。

from collections import Counter

hist = Counter()
for entry in data:
    hist[entry['location']] += 1

http://docs.python.org/library/collections.html#collections.Counter

答案 3 :(得分:1)

三元运算符是一个命令吗?

hist[entry["location"]] = hist[entry["location"]]+1 if entry["location"] in hist else 1

(编辑,因为我第一次搞砸了)