python 同じ値を削除したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 123

klzu1028

score 6

JSONで書かれたデータを取得、同じキーをリスト化させました。
その中からユニークな数値のみで残したく
一度tupleにして、リストに戻しました。
中身を別ツールで確認すると、一部重複している値がまだ残っている状態です。
何が足りていないかアドバイスいただけないでしょうか。

URL = 'XXXXX'
RES = urllib.request.urlopen(URL)
CONTENT = json.loads(RES.read().decode('utf-8'))

ip_list = []
for x in CONTENT:
    ip_list.append(x.get("ips",""))

list_of_tuples = [ tuple(x) for x in ip_list ]
unique_list = list(set(list_of_tuples))
list_of_iplist = [ list(x) for x in unique_list ] 
pprint.pprint(list_of_iplist)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tiitoi

    2019/03/25 18:40

    ip_list 変数の中身はどのような値になってますか?

    キャンセル

  • klzu1028

    2019/03/25 18:50

    ip_listの中身はこのようになっています。
    ['IPアドレス','IPアドレス','IPアドレス','IPアドレス','IPアドレス']['IPアドレス','IPアドレス','IPアドレス','IPアドレス','IP]['IPアドレス','IPアドレス','IPアドレス']['IPアドレス','IPアドレス','IPアドレス','IPアドレス','IPアドレス']
    IPアドレスがかぶっている箇所があるので、全体の中から同じIPは1つだけにさせる処理を書いたつもりなのですが、
    まだかぶっている部分があり、どこが問題がわからず。。

    キャンセル

  • tiitoi

    2019/03/25 18:52

    ['IPアドレス','IPアドレス', ...] という1次元配列ではなく、なぜ2次元配列なのでしょうか?

    キャンセル

  • klzu1028

    2019/03/25 19:15

    申し訳ありません、検索したのですが、キーに紐づいている値を持ってきたいという自分が実施している事までしかわからず。
    2次元配列状態で表示されている理由が説明できないです。

    キャンセル

回答 1

checkベストアンサー

0

以下のようにしてはいかがでしょうか。

  1. 2次元配列を1次元配列にする。
  2. set() でセットに変換することで重複する値を除き、list() でリストに戻す。
ip_addrs = [['247.124.49.147',
             '43.161.249.61',
             '43.161.249.61'],
            ['254.152.178.255',
             '43.204.250.165'],
            ['126.16.42.79',
             '254.152.178.255',
             '166.44.248.83'],
            ['254.152.178.255',
             '24.117.72.116']]

def flatten(nested_list):
    return [e for inner_list in nested_list for e in inner_list]

# 2次元配列を1次元配列にする。
ip_addrs = flatten(ip_addrs)
print(ip_addrs)
# ['247.124.49.147', '43.161.249.61', '43.161.249.61', '254.152.178.255',
#  '43.204.250.165', '126.16.42.79', '254.152.178.255', '166.44.248.83',
#  '254.152.178.255', '24.117.72.116']

# 重複を除く。
ip_addrs = list(set(ip_addrs))
# ['247.124.49.147', '43.161.249.61', '43.161.249.61', '254.152.178.255', '43.204.250.165',
#  '126.16.42.79', '254.152.178.255', '166.44.248.83', '254.152.178.255', '24.117.72.116']

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/25 21:17

    2次元配列を1次元配列にするっていう発想が全くなかったです。flattenというのも初めて知りました。
    ありがとうございます。なぜそれで動くのかという挙動確認を細かく勉強します。

    キャンセル

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

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る