在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制作'看到'哈希的方式?
答案 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'}