Bạn có thể đặt tất cả các tiền tố của các khóa được chèn vào dict, vì vậy đối với khóa foo
bạn sẽ chèn f
, fo
và foo
. Bạn sẽ có O (1) tra cứu, nhưng bạn sẽ dành nhiều thời gian trên tiền xử lý (O (k), với k là chiều dài key), và lãng phí rất nhiều bộ nhớ:
def insert_with_prefixes(key, value, dict_):
prefixes = (key[:i+1] for i in xrange(len(key)))
dict_.update((prefix, value) for prefix in prefixes)
Đối với sử dụng hàng ngày tôi sẽ đi (và tôi đi) với phương pháp trong câu trả lời arshajii's. Và tất nhiên, có trong tâm trí có thể nhiều va chạm với tiền tố ngắn (đây: "h"
):
>>> a = {}
>>> insert_with_prefixes('hello', 'world', a)
>>> insert_with_prefixes('homo', 'sapiens', a)
>>> a
{'h': 'sapiens', 'hom': 'sapiens', 'homo': 'sapiens', 'ho': 'sapiens',
'hel': 'world', 'hell': 'world', 'hello': 'world', 'he': 'world'}
Nguồn
2013-08-05 20:11:18
tôi nghi ngờ bạn có thể đạt được bất cứ điều gì tốt hơn là bạn không thể suy ra các hash của phím từ một phần của chìa khóa. Ngoài ra điều này lá phòng để mơ hồ nếu hai phím bắt đầu với cùng một tiền tố. – Hyperboreus
Có cấu trúc dữ liệu có thể thực hiện điều này, nhưng chúng không có sẵn trong thư viện chuẩn của Python. Ví dụ: cây cố gắng hoặc cây tìm kiếm nhị phân. – delnan
Vì câu hỏi là về tốc độ, tôi cảm thấy bắt buộc phải chỉ ra rằng 'cho khóa trong dict_:' là nhanh hơn nhiều so với 'cho khóa trong dict_.keys():', như sau này xây dựng một danh sách các phím. –