🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

701閲覧

Discord.py(主にpy)でjsonのデータを順位化したい

koucha0

総合スコア72

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/03 08:12

前提・実現したいこと

forで反復処理をし、それを文字列結合させる。
Discord.pyの機能的な事だと、
embedのvalueに順位形式でjsonを出したいです。
具体的には

1位:{user.id or name}:{level}レベル({experience}経験値 2位:・・・・・・・・・・・

のような感じで埋め込みたいです。見やすいようにしたいです。
詳しい部分的な事は下の「該当のソースコード」に記載しています。

発生している問題・エラーメッセージ

AttributeError: 'dict' object has no attribute 'split'

該当のソースコード

python

1 with open("users.json", "r")as f: 2 users = json.load(f) #users.jsonをロード(users.jsonは下の「jsonの内容」のようになっています) 3 4 users_sorted = sorted(users.items(), reverse=True, key=lambda v: v[1]["level"]) #ここで読み取ったデータをlevelの高い順(reverse=Ture)で並び替え 5 for user,level in users_sorted: #反復処理でデータが見やすいように順位化する。 6 print(user) #jsonのuserをprint 7 print(level) #jsonのlevelをprint 8#ここでforの反復処理でデータが以下のように出力されます。 9#538584825599098903 10#{'experience': 15, 'level': 15} 11#702447175090700368 12#{'experience': 10, 'level': 2} 13#これを文字列化するために以下をします。 14 somestr = level 15 lvl_list = somestr.split(', ') 16 print(lvl_list) 17 result = ', '.join(lvl_list) 18 print(result)

補足情報(FW/ツールのバージョンなど)

Python 3.9.1
Discord.py 1.5.1
Visual Studio Code 2019

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

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

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

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

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

guest

回答1

0

ベストアンサー

type(level)をやってもらうとわかりますが、levelには辞書が入っています(jsonライブラリがいい感じにやってくれる)。

そのため、somestr["level"]やsomestr["experience"]で値が取り出せます。
その後にlevelやexperienceに代入してください。

投稿2021/01/03 08:32

編集2021/01/03 08:34
sevenc-nanashi

総合スコア643

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問