Pythonでソートが効かないリストを文字列を操作してソートさせる


press
Pythonでソートが効かないリストを文字列を操作してソートさせる

Pythonでソートが効かないリストを文字列を操作してソートさせる

[‘01234_B.jpg?X=n…’,
‘12340_A.jpg?X=n…’,
‘00123_C.jpg?X=n…’,
‘34012_E.jpg?X=n…’]のように文字列の途中にABCDや1234といったキーになる文字列がある場合はlist.sort()メソッドでソートしても
[‘00123_C.jpg?X=n…’,
‘01234_B.jpg?X=n…’,
‘12340_A.jpg?X=n…’,
‘34012_E.jpg?X=n…’]となってしまい意図したソートができません。

順不同リストを文字列中の値(_A、_B、_C、_E)をキーに
[‘12340_A.jpg?X=n…’,
‘01234_B.jpg?X=n…’,
‘00123_C.jpg?X=n…’,
‘34012_E.jpg?X=n…’]のようにソートする場合は、一度辞書型に変換してからソートしてリスト化することでソート可能です。

random_image_list = ['01234_B.jpg?X=n...', '12340_A.jpg?X=n...', '00123_C.jpg?X=n...', '34012_E.jpg?X=n...']

image_list = []
image_dict = {}

for image in random_image_list:
    image_split = image.split(".jpg")[0]
    image_dict[str(image_split)[-1]] = image

image_dict_sort = sorted(image_dict.items())

for img in image_dict_sort:
    image_list.append(img[1])

print(image_list)

結果

['12340_A.jpg?X=n...', '01234_B.jpg?X=n...', '00123_C.jpg?X=n...', '34012_E.jpg?X=n...']

解説

image_split = image.split(".jpg")[0]
.jpgを起点に文字列を分解して.jpg以前の文字列を取得

image_dict[str(image_split)[-1]] = image
分解した文字列からキーとなる最後の文字(ABCE)をdictのkeyに代入
valueにリストの文字列を代入

image_dict_sort = sorted(image_dict.items())
dictをソート

image_list.append(img[1])
ソートするとタプルのリストに変換されるので指定した値だけを取得してリスト化


株式会社ファントムへのお問い合わせ

群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。




    Show Comments (0)

    Comments

    Related Articles

    Python

    仮想環境でかなり困った

    下記のdeep fakeを導入しようとしたら仮想環境作成でかなり困ったので記録しておく。 https://knowledge.sakura.ad.jp/26769/ 試したこと Docker まずdockerでpytho […]

    Posted on by EIGHT
    Python

    Jupyter NotebookでもBlackでコードフォーマット

    Jupyter NotebookでもBlackでコードフォーマット コードの可読性を上げて保守性を高めたり、コードの属人化を防いで生産性を向上させるためのルール(コーディング規約)に則った開発を行うために、ファントムでは […]

    Posted on by press

    最新情報をお届けします!

    メーリングリストに登録するとファントムの最新情報をお届けします

    お客様のメールアドレスを共有することはありません