1. ホーム
  2. python

Python でアルファベット集合をソートする方法

2023-09-27 12:07:39

質問

私は、あるセット

set(['booklet', '4 sheets', '48 sheets', '12 sheets'])

ソート後、以下のようにしたい。

4 sheets,
12 sheets,
48 sheets,
booklet

何かいい案はないでしょうか?

どのように解決するのですか?

短く、甘く。

sorted(data, key=lambda item: (int(item.partition(' ')[0])
                               if item[0].isdigit() else float('inf'), item))

このバージョンでは

  • Python 2 と Python 3 で動作します、なぜなら。
    • 文字列と整数の比較を想定していない (Python 3 では動作しない)
    • これは cmp パラメータを sorted (これはPython 3には存在しません)
  • 数量が等しい場合、文字列部分でソートされます。

例にあるような印刷出力を正確に行いたいのであれば

data = set(['booklet', '4 sheets', '48 sheets', '12 sheets'])
r = sorted(data, key=lambda item: (int(item.partition(' ')[0])
                                   if item[0].isdigit() else float('inf'), item))
print ',\n'.join(r)