В Doc отсутствует пример... Как вы используете bisect.insort_left)_
на основе ключа?
Попытка вставить на основе ключа.
bisect.insort_left(data, ('brown', 7))
помещает вставку в data[0]
.
Из документов...
bisect.insort_left(
a, x, lo = 0, hi = len (a))
Вставить x в в отсортированном порядке. Это эквивалентноa.insert(bisect.bisect_left(a, x, lo, hi), x)
, предполагая, что a уже отсортировано. Имейте в виду, что в поиске O (log n) преобладает шаг вставки медленной O (n).
Использование образца:
>>> data = [('red', 5), ('blue', 1), ('yellow', 8), ('black', 0)]
>>> data.sort(key=lambda r: r[1])
>>> keys = [r[1] for r in data] # precomputed list of keys
>>> data[bisect_left(keys, 0)]
('black', 0)
>>> data[bisect_left(keys, 1)]
('blue', 1)
>>> data[bisect_left(keys, 5)]
('red', 5)
>>> data[bisect_left(keys, 8)]
('yellow', 8)
>>>
Я хочу поместить ('brown', 7)
после ('red', 5)
в отсортированный список в data
с помощью bisect.insort_left
. Прямо сейчас bisect.insort_left(data, ('brown', 7))
помещает ('brown', 7)
в data[0]
... потому что я не использую ключи для вставки... docs не показывают делать вставки с помощью клавиш.