如何用python dict制作“看到”的哈希?

时间:2018-04-03 20:27:41

标签: python dictionary

在Perl中,人们可以这样做:

onError

这是一种通过跟踪已经“看到”的内容来删除重复项的方法。在python中你不能这样做:

my %seen;

foreach my $dir ( split /:/, $input ) {
        $seen{$dir}++;
}

上面的python导致seen = {} for x in ['one', 'two', 'three', 'one']: seen[x] += 1

什么是python-y制作'看到'哈希的方式?

3 个答案:

答案 0 :(得分:0)

如果您将seen[x] += 1展开到seen[x] = seen[x] + 1,则代码的问题很明显:您在分配seen[x]之前尝试访问seen = {} for x in ['one', 'two', 'three', 'one']: if x in seen: seen[x] += 1 # we've seen it before, so increment else: seen[x] = 1 # first time seeing x 。相反,您需要先检查密钥是否存在:

active

答案 1 :(得分:0)

使用defaultdict获取此行为。问题是你需要指定defaultdict的数据类型才能用于那些没有值的键:

In [29]: from collections import defaultdict

In [30]: seen = defaultdict(int)

In [31]: for x in ['one', 'two', 'three', 'one']:
    ...:     seen[x] += 1

In [32]: seen
Out[32]: defaultdict(int, {'one': 2, 'three': 1, 'two': 1})

您也可以使用计数器:

>>> from collections import Counter
>>> seen = Counter()
>>> for x in ['one', 'two', 'three', 'one']: seen[x] += 1
... 
>>> seen
Counter({'one': 2, 'three': 1, 'two': 1})

如果您只需要唯一身份证明,只需进行设定操作:set(['one', 'two', 'three', 'one'])

答案 2 :(得分:0)

您可以使用set

>>> seen=set(['one', 'two', 'three', 'one'])
>>> seen
{'one', 'two', 'three'}