ฉันมีรายการคำในพจนานุกรมที่มีค่า = การซ้ำซ้อนของคำหลัก แต่ฉันต้องการรายการคำที่แตกต่างเท่านั้นดังนั้นฉันจึงต้องการนับจำนวนคำหลัก มีวิธีนับจำนวนคำหลักหรือมีวิธีอื่นที่ฉันควรค้นหาคำที่แตกต่างกันหรือไม่
ฉันมีรายการคำในพจนานุกรมที่มีค่า = การซ้ำซ้อนของคำหลัก แต่ฉันต้องการรายการคำที่แตกต่างเท่านั้นดังนั้นฉันจึงต้องการนับจำนวนคำหลัก มีวิธีนับจำนวนคำหลักหรือมีวิธีอื่นที่ฉันควรค้นหาคำที่แตกต่างกันหรือไม่
คำตอบ:
len(yourdict.keys())
หรือเพียงแค่
len(yourdict)
หากคุณต้องการนับคำที่ไม่ซ้ำในไฟล์คุณสามารถใช้set
และทำเช่นนั้นได้
len(set(open(yourdictfile).read().split()))
len(yourdict.keys())
และlen(yourdict)
เป็น O (1) หลังเร็วขึ้นเล็กน้อย ดูการทดสอบของฉันด้านล่าง
len(yourdict.values())
จำนวนคำที่แตกต่างกัน (เช่นจำนวนรายการในพจนานุกรม) สามารถพบได้โดยใช้len()
ฟังก์ชั่น
> a = {'foo':42, 'bar':69}
> len(a)
2
เพื่อให้ได้คำที่ต่างกันทั้งหมด (เช่นปุ่ม) ใช้.keys()
วิธีการ
> list(a.keys())
['foo', 'bar']
การโทรlen()
ในพจนานุกรมของคุณโดยตรงและเร็วกว่าการสร้างตัววนซ้ำd.keys()
และการเรียก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)
หากคำถามเกี่ยวกับการนับจำนวนคำหลักก็จะแนะนำสิ่งที่ชอบ
def countoccurrences(store, value):
try:
store[value] = store[value] + 1
except KeyError as e:
store[value] = 1
return
ในฟังก์ชั่นหลักมีบางสิ่งที่ลูปผ่านข้อมูลและส่งผ่านค่าไปยังฟังก์ชั่น countoccurrences
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
countoccurrences()
count_occurrences()
นอกจากนี้ถ้าคุณนำเข้ามีวิธีที่ดีกว่ามากที่จะทำมันcollections.Counter
from collections import Counter; store = Counter(); for data in list: store[list] += 1
มีการดัดแปลงบางอย่างในคำตอบที่โพสต์ภายใต้ UnderWaterKremlin เพื่อให้มันพิสูจน์ python3 ผลลัพธ์ที่น่าประหลาดใจด้านล่างเป็นคำตอบ
รายละเอียดระบบ:
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.keys())
len()