Erick
Июль 9, 2008 15:04:01
Есть ли в Питоне функции для сортировки нескольких массивов одновременно с сохранением соотвеьсьвия межу ключами и значениями.
Аналог в PHP - array_multisort (
http://www.php.net/manual/ru/function.array-multisort.php).Заранее благодарен.
ZAN
Июль 9, 2008 15:55:46
Dict принципиально не подлежит сортировке.
Erick
Июль 9, 2008 16:18:50
ZAN А как можно. Я Питон практически не знаю, но хотел бы начать изучать на конкретной задаче.
Там нужно набор данных отсортировать по двум полям, одно из которых строковое содержит номера помещений (например, 001, 002, 4, 2, 10А, 10Б), нужно отсортировать по нему как буд-то он числовое. В PHP переганяется эти поля и весь набор в массивы, а затем они сортируются вышеописанной функцией с сохранением соответствия индексов. Как это можно в Питоне сделать?
ZAN
Июль 9, 2008 16:37:27
А… для этого в питоне есть структура list, у которой есть метод sort:
rooms =
rooms.sort()
Единственное “но” - это то, что метод отсортирует элементы не так, как тебе нужно (т.к. сортировать их будет, как строки), но есть возможность для таких целей передавать в качестве параметра функцию cmp, которая будет сравнивать два элемента и возвращать, какой из элементов - больший.
То есть, единственное, что нужно будет сделать - это преобразовать в этой функцие строки в числа (например, отделить цифры от др. символов регуляркой) и вернуть результат собственного сравнения.
def cmp(one, two):
bla-bla
return ans
rooms.sort(cmp)
Jenyay
Июль 9, 2008 20:18:20
Можно сделать класс, который бы содержал по одному элементу из каждого массива. Сделать массив такого класса и при сортировке указать свою функцию, которая будет сортировать эти классы из двух элементов. Вместо класса вполне подойдет кортеж.