質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

718閲覧

2次元配列の並び替えがうなくいかない

jazzmaster

総合スコア26

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/12/17 05:58

IPアドレスに関するリストなのですが、
data.sort()により並び替えを実行したところ下記のようになります。

python

1data = [['AAA', '10.10.10.0'], 2 ['AAA', '10.10.10.1'], 3 ['BBB', '10.10.10.0'], 4 ['BBB', '10.10.10.100'] 5 ['BBB', '10.10.10.50']]

 

これを下記のようにしたいのですが可能でしょうか?
もし可能でしたらご教示いただければ幸いです。

python

1data = [['AAA', '10.10.10.0'], 2 ['AAA', '10.10.10.1'], 3 ['BBB', '10.10.10.0'], 4 ['BBB', '10.10.10.50'] 5 ['BBB', '10.10.10.100']]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

もし'10.10.10.0'の文字列がIPアドレスを表すものなのであれば

Python3

1from ipaddress import IPv4Address 2 3 4data = [ 5 ['BBB', '192.168.1.1'], 6 ['BBB', '10.10.10.0'], 7 ['AAA', '10.10.10.0'], 8 ['BBB', '10.10.10.100'], 9 ['BBB', '10.10.10.50'], 10 ['AAA', '10.10.10.1'] 11] 12 13data.sort(key=lambda e: [e[0], int(IPv4Address(e[1]))]) 14 15for lis in data: 16 print(lis) 17 18

出力結果:

['AAA', '10.10.10.0']

['AAA', '10.10.10.1']
['BBB', '10.10.10.0']
['BBB', '10.10.10.50']
['BBB', '10.10.10.100']
['BBB', '192.168.1.1']

投稿2021/12/17 06:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

以下は distutils.version.LooseVersion を使う方法です。

python

1from distutils.version import LooseVersion 2from pprint import pprint 3 4data = [['AAA', '10.10.10.0'], 5 ['AAA', '10.10.10.1'], 6 ['BBB', '10.10.10.0'], 7 ['BBB', '10.10.10.100'], 8 ['BBB', '10.10.10.50']] 9 10data.sort(key=lambda x: (x[0], LooseVersion(x[1]))) 11 12pprint(data) 13 14# 15[['AAA', '10.10.10.0'], 16 ['AAA', '10.10.10.1'], 17 ['BBB', '10.10.10.0'], 18 ['BBB', '10.10.10.50'], 19 ['BBB', '10.10.10.100']]

投稿2021/12/17 06:21

melian

総合スコア20655

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jazzmaster

2021/12/17 06:57

ありがとうございます。こちらのやり方ですと[1]が10.10.10.1のようなものではなく"aaa"などになっていた場合でも対応可能でしたためベストアンサーとさせていただきました。
guest

0

以下です。

python

1>>> print(data) 2[['AAA', '10.10.10.0'], ['AAA', '10.10.10.1'], ['BBB', '10.10.10.0'], ['BBB', '10.10.10.100'], ['BBB', '10.10.10.50']] 3>>> sorted(data, key=lambda x: (x[0],list(map(int, x[1].split('.'))))) 4[['AAA', '10.10.10.0'], ['AAA', '10.10.10.1'], ['BBB', '10.10.10.0'], ['BBB', '10.10.10.50'], ['BBB', '10.10.10.100']]

投稿2021/12/17 06:09

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問