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

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

ただいまの
回答率

88.33%

辞書のキーで作製したNumPy配列を辞書の値に変更したい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 5,794

tsujitsuji

score 13

閲覧ありがとうございます。
pythonのNumPyを使用しプログラミングをしている際、困ったことがあり質問させていただきました。
辞書型で作製した際のキーをNumPy配列により並べ、その後キーに対応した辞書の値に変更をしたいです。

具体的には

dic = {'a':1,'c':2,'d':3,'b':4}
dic_keys = list(dic)
dic_keys.sort() #リスト内のソートを行いたい
print(dic_keys)
np_dic_keys = np.array(dic_keys)
print(np_dic_keys)

とした際、結果が['a' 'b' 'c' 'd']と出力されます。
この後、それぞれnp_dic_keys内の'a''b''c''d'に対応する辞書の値「1,2,3,4」にnp_dic_keysの値を同じ形(行、列などを変えない)で変更したいです。

最終的には辞書の値がpandasの2次元のデータフレームでも対応できるようにしたいと考えているのですが、どのように変更させればいいのかわからず困っております。

解決方法や別の方法などがありましたらご教授頂ければ幸いです。

よろしくおねがいします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • hayataka2049

    2018/08/28 11:02 編集

    申し訳ないのですが、質問文を何回読んでも、どんなことをしたいのかよくわかりません。今書いてある内容をできるだけ整理してわかりやすくし、更にpandasのデータフレームの場合の具体的な例も示す必要があるかと

    キャンセル

回答 3

checkベストアンサー

+2

dic.keys()をdic.values()にすればいいのでは?


key, valueの並びを一致させたいなら、それぞれをリストに分解するのがいいかも。

dic = {'a':1,'b':2,'c':3,'d':4}

keys = list()
values = list()

for key, value in dic.items():
    keys.append(key)
    values.append(value)

こういうことかな??

sorted_keys = sorted(dic)  # 昇順に並んだkeyを取得

values = []
for key in sorted_keys:  # sort済みのkeyを順番に舐める
    values.append(dic[key])

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/08/28 11:06

    最終的に2次元のnp配列?に辞書の値が2次元のデータフレームを配列の並びのまま入れたいと考えておりますので、その時に質問させてもらうかもしれません。
    よろしくお願いします。

    キャンセル

  • 2018/08/28 11:07

    ここではpandas, numpyを使わずにPythonの標準的な機能だけでやっています。最終的にやりたいことを踏まえて、まぎちゃんの回答も見といて下さいね。

    キャンセル

  • 2018/08/28 11:15

    はい。具体的にわからないところをはっきりさせてもう一度質問させていただこうと思います。
    初心者ですがよければ今後ともよろしくお願いいたします。

    キャンセル

+2

最終的には辞書の値がpandasの2次元のデータフレームでも対応できるようにしたいと考えているのですが

であれば、最初からDataFrame化したほうが楽なのではないでしょうか

import pandas as pd

dic = {'a':1,'b':2,'c':3,'d':4}
# DataFrame化
df = pd.DataFrame({'key' : list(dic.keys()),'val' : list(dic.values())})
# KeyでSort
df = df.sort_values('key')
print(df)
#  key  val
#3   a    1
#2   b    2
#1   c    3
#0   d    4

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/08/28 11:12

    回答ありがとうございます。
    最初からDataFrameにしておけばキーや値として考えなくてもいいということですね。
    このほうが確かに扱いやすいと感じます。
    抽象的に質問をしてしまったため、もう一度やりたいことをはっきりさせてから質問させていただきます。
    その際ももしよろしければご教授頂ければ嬉しいです。

    キャンセル

+2

「辞書の値がpandasの2次元のデータフレームでも対応できるようにしたい」の意味と、numpy.ndarray型にする理由がわかりませんが、

>>> dic = {'a':1,'c':2,'d':3,'b':4}
>>> t = sorted(dic.items())
>>> t
[('a', 1), ('b', 4), ('c', 2), ('d', 3)]
>>> dic_keys, dic_values = zip(*t)
>>> dic_keys
('a', 'b', 'c', 'd')
>>> dic_values
(1, 4, 2, 3)

でいいかと。

numpy.ndarray型にする部分は省きます(ここまでの話と関係がないので)。

https://docs.python.jp/3/library/stdtypes.html#dict.items
https://docs.python.jp/3/library/functions.html#zip の下の方のコード例

1行にまとめるとこう。

>>> dic = {'a':1,'c':2,'d':3,'b':4}
>>> dic_keys, dic_values = zip(*sorted(dic.items()))
>>> dic_keys
('a', 'b', 'c', 'd')
>>> dic_values
(1, 4, 2, 3)

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/08/28 11:21

    申し訳ありません、まだDataFrameとnumpy.ndarrayとの違いがよく理解できておらず、がむしゃらに書いているところがあります。
    質問の文章も明確にして、もう一度質問させていただこうとおもいます。
    その際もご教授頂ければ嬉しいです。
    よろしくお願いいたします。

    キャンセル

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

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

関連した質問

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