8

質問があります。これは、ElementTree ライブラリによって形成されたリストのリストです。

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

word1..4 には、Unicode 文字 (â、ü、ç) を含めることができます。

このリストのリストをカスタム アルファベットで並べ替えたいと思います。

Pythonで単語を並べ替えるここからカスタムアルファベットで並べ替える方法を知っています

ここからキーでソートする方法も知っていますhttp://wiki.python.org/moin/HowTo/Sorting

問題は、これら 2 つの方法を適用して「リストのリスト」をソートする方法が見つからなかったことです。

4

3 に答える 3

19

あなたの最初のリンクは多かれ少なかれ問題を解決します。ラムダ関数でリストの最初の項目のみを確認する必要があります。

alphabet = "zyxwvutsrqpomnlkjihgfedcba"

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

かなり大きなリストをソートしている場合、私が提案する1つの変更は、最初にアルファベット構造を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]])
于 2012-05-18T03:16:51.727 に答える
2

私があなたを正しく理解していれば、オブジェクトの要素にキーを適用する必要があるときに、キーの並べ替え手法を適用する方法を知りたいでしょう。つまり、キー関数を実際に並べ替えている ['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, ...) は、新しいソート済みリストを返します。

于 2012-05-18T03:14:39.543 に答える
0

よく働く!!!助けてくれてありがとう ここに私の話があります: 私はトルコ語-ロシア語の辞書を 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>

みんなに感謝

于 2012-05-18T17:21:54.273 に答える