Câu trả lời:
len(yourdict.keys())
hoặc chỉ
len(yourdict)
Nếu bạn muốn đếm các từ duy nhất trong tệp, bạn có thể chỉ cần sử dụng set
và làm như
len(set(open(yourdictfile).read().split()))
len(yourdict.keys())
và len(yourdict)
là O (1). Cái sau nhanh hơn một chút. Xem các thử nghiệm của tôi dưới đây.
len(yourdict.values())
Gọi len()
trực tiếp vào từ điển của bạn hoạt động, và nhanh hơn so với việc xây dựng một trình vòng lặp d.keys()
và gọi len()
nó, nhưng tốc độ của một trong hai sẽ không đáng kể so với bất cứ điều gì chương trình của bạn đang làm.
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)
Nếu câu hỏi là về việc đếm số lượng từ khóa thì sẽ đề xuất một cái gì đó như
def countoccurrences(store, value):
try:
store[value] = store[value] + 1
except KeyError as e:
store[value] = 1
return
trong hàm chính có một cái gì đó lặp qua dữ liệu và truyền các giá trị cho hàm đếm số
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"
Mã đầu ra
Key a has occurred 2 times
Key c has occurred 2 times
Key b has occurred 1 times
countoccurrences()
Thay vào đó, các quy ước đặt tên PEP 8 ra lệnh phải thay thế count_occurrences()
. Ngoài ra, nếu bạn nhập collections.Counter
, có một cách tốt hơn để làm điều đó : from collections import Counter; store = Counter(); for data in list: store[list] += 1
.
Một số sửa đổi đã được thực hiện trên câu trả lời được đăng tải UnderWaterKremlin để làm cho nó bằng chứng python3. Một kết quả đáng ngạc nhiên dưới đây là câu trả lời.
Thông số hệ thống:
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
Kết quả:
1) = 37,0100378
2) = 37.00214889999999595
Vì vậy, có vẻ như len(d.keys())
hiện đang nhanh hơn so với chỉ sử dụng len()
.