упорядочить элементы в каждом списке так, чтобы первый элемент был "b.something"
Поддержание порядка после первого элемента не имеет значения.
Это не сортировка.Концептуально, вы просто пытаетесь вывести этот элемент на передний план.
Другими словами, вам нужен список, состоящий из этого элемента, за которым следует все, что не является этим элементом.Немного обдумав это для случая, когда есть несколько b.something
с, и отметив, что нам все равно, что произойдет, если первый элемент является b.something
, мы можем перефразировать это: список каждого элемента, соответствующегоусловие («начинается с b.
»), за которым следует каждый элемент, не соответствующий условию.(Это иногда называется разбиение ; см., Например, std::partition
в C ++.)
В Python это так же просто, как описать эти два компонента списка со списками и объединить их вместе:
[x for x in li if x.startswith('b.')] + [x for x in li if not x.startswith('b.')]
... Или вы можете делать вид, что сортируете, просто с помощью набора элементов, которые действительно имеют только два значения после применения key
, и применять соответствующий key
, как в ответе Игнасио Васкеса-Абрамса.