我有一个字典映射关键字的重复关键字,但我只想要一个不同的单词列表,所以我想计算关键字的数量。是否有一种方法来计算关键字的数量,或者是否有另一种方法我应该寻找不同的单词?


当前回答

一些修改,张贴回答水下克里姆林宫,使其python3证明。下面是一个令人惊讶的结果作为答案。

系统规格:

python = 3.7.4, Conda = 4.8.0 3.6Ghz, 8核,16gb。

import timeit

d = {x: x**2 for x in range(1000)}
#print (d)
print (len(d))
# 1000

print (len(d.keys()))
# 1000

print (timeit.timeit('len({x: x**2 for x in range(1000)})', number=100000))        # 1

print (timeit.timeit('len({x: x**2 for x in range(1000)}.keys())', number=100000)) # 2

结果:

1) = 37.0100378

2) = 37.002148899999995

因此,len(d.s keys())目前似乎比仅使用len()更快。

其他回答

不同单词的数量(即字典中条目的数量)可以使用len()函数找到。

> a = {'foo':42, 'bar':69}
> len(a)
2

要获取所有不同的单词(即键),请使用.keys()方法。

> list(a.keys())
['foo', 'bar']
len(yourdict.keys())

或者只是

len(yourdict)

如果你想统计文件中唯一的单词,你可以使用set和do like

len(set(open(yourdictfile).read().split()))

一些修改,张贴回答水下克里姆林宫,使其python3证明。下面是一个令人惊讶的结果作为答案。

系统规格:

python = 3.7.4, Conda = 4.8.0 3.6Ghz, 8核,16gb。

import timeit

d = {x: x**2 for x in range(1000)}
#print (d)
print (len(d))
# 1000

print (len(d.keys()))
# 1000

print (timeit.timeit('len({x: x**2 for x in range(1000)})', number=100000))        # 1

print (timeit.timeit('len({x: x**2 for x in range(1000)}.keys())', number=100000)) # 2

结果:

1) = 37.0100378

2) = 37.002148899999995

因此,len(d.s keys())目前似乎比仅使用len()更快。

如果问题是关于计算关键字的数量,然后会推荐一些像

def countoccurrences(store, value):
    try:
        store[value] = store[value] + 1
    except KeyError as e:
        store[value] = 1
    return

在main函数中有一些东西可以循环遍历数据并将值传递给countooccurrence函数

if __name__ == "__main__":
    store = {}
    list = ('a', 'a', 'b', 'c', 'c')
    for data in list:
        countoccurrences(store, data)
    for k, v in store.iteritems():
        print "Key " + k + " has occurred "  + str(v) + " times"

代码输出

Key a has occurred 2 times
Key c has occurred 2 times
Key b has occurred 1 times

直接在字典上调用len()是有效的,并且比构建迭代器d.s ekeys()并在其上调用len()快,但与程序所做的其他事情相比,这两者的速度都可以忽略不计。

d = {x: x**2 for x in range(1000)}

len(d)
# 1000

len(d.keys())
# 1000

%timeit len(d)
# 41.9 ns ± 0.244 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

%timeit len(d.keys())
# 83.3 ns ± 0.41 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)