Пользовательская сортировка питона

У меня вопрос: Это список списков, сформированных библиотекой ElementTree.

   [['word1', <Element tag at b719a4cc>], ['word2', <Element tag at b719a6cc>], ['word3', <Element tag at b719a78c>], ['word4', <Element tag at b719a82c>]]

word1..4 может содержать символы Юникода, т. е. (& # xE2;, & # xFC;, & # xE7;).

I want to sort this list of lists by my custom alphabet.

Я знаю, как сортировать по алфавиту отсюда сортировка слов в питоне

Я также знаю, как сортировать по ключу отсюдаhttp://wiki.python.org/moin/HowTo/Sorting

Проблема заключается в том, что я не смог найти способ применения этих двух методов для сортировки моего «списка списков».

Ответы на вопрос(3)

Вот моя история: У меня есть турецко-русский словарь в формате xdxf. проблема заключалась в том, чтобы разобраться в этом. Я нашел решение здесьhttp://effbot.org/zone/element-sort.htm но он не сортировал символы Юникода. вот окончательный исходный код:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import codecs
alphabet = u"aâbcçdefgğhiıjklmnoöpqrstuüvwxyz"
tree = ET.parse("dict.xml")
# this element holds the phonebook entries
container = tree.find("entries")
data = []
for elem in container:
    keyd = elem.findtext("k")
    data.append([keyd, elem])
data.sort(key=lambda data: [alphabet.index(c) for c in data[0]])
container[:] = [item[-1] for item in data]
tree.write("new-dict.xml", encoding="utf-8")

пример содержимого файла dict.xml

<cont>
  <entries>
<ar><k>â</k>def1</ar>
<ar><k>a</k>def1</ar>
<ar><k>g</k>def1</ar>
<ar><k>w</k>def1</ar>
<ar><k>n</k>def1</ar>
<ar><k>u</k>def1</ar>
<ar><k>ü</k>def1</ar>
<ar><k>âb</k>def1</ar>
<ar><k>ç</k>def1</ar>
<ar><k>v</k>def1</ar>
<ar><k>ac</k>def1</ar>
  </entries>
</cont>

Спасибо всем

вы хотите знать, как применять метод сортировки ключей, когда ключ должен применяться к элементу вашего объекта. Другими словами, вы хотите применить функцию ключа к «wordx», а не к элементу [«wordx», ...], который вы фактически сортируете. В этом случае вы можете сделать это:

my_alphabet = "..."

def my_key(elem):
    word = elem[0]
    return [my_alphabet.index(c) for c in word]

my_list.sort(key=my_key)

или используя стиль в вашей первой ссылке:

my_alphabet = "..."
my_list.sort(key=lambda elem: [my_alphabet.index(c) for c in elem[0]])

Имейте в виду, что my_list.sort будет сортировать на месте, фактически изменяя ваш список. sorted (my_list, ...) вернет новый отсортированный список.

чтобы лямбда-функция смотрела только на первый элемент в вашем списке:

alphabet = "zyxwvutsrqpomnlkjihgfedcba"

new_list = sorted(inputList, key=lambda word: [alphabet.index(c) for c in word[0]])

Одна из модификаций, которые я могу предложить, если вы сортируете достаточно большой список, состоит в том, чтобы сначала преобразовать структуру алфавита в dict, чтобы поиск по индексу выполнялся быстрее:

alphabet_dict = dict([(x, alphabet.index(x)) for x in alphabet)
new_list = sorted(inputList, key=lambda word: [alphabet_dict[c] for c in word[0]])

ВАШ ОТВЕТ НА ВОПРОС