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

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

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

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

Q&A

1回答

5520閲覧

TypeError map object is not subscriptable

Kentaro0919

総合スコア258

Python

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

0グッド

0クリップ

投稿2016/08/28 00:46

編集2022/01/12 10:55

cloudstack-cloudmonkeyのpython3化の続きです、ファイルに書き込めないのはpyhton2からpython3に成った時のバイナリの挙動が変わり、ファイルを開けるときに
f = open(json_file, 'r')
から

python

1 2f = open(json_file, 'rb') 3

にすること書き込めるようになりました。

しかし、コマンドを実行するとエラーが発生して終了してしまいます。

python

1(local) ???? > Lists resources 2Traceback (most recent call last): 3 File "/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/cmd.py", line 214, in onecmd 4 func = getattr(self, 'do_' + cmd) 5AttributeError: 'CloudMonkeyShell' object has no attribute 'do_Lists' 6 7During handling of the above exception, another exception occurred: 8 9Traceback (most recent call last): 10 File "/usr/local/bin/cloudmonkey", line 11, in <module> 11 load_entry_point('cloudmonkey', 'console_scripts', 'cloudmonkey')() 12 File "/Users/kentaro/python/cloudstack-cloudmonkey/cloudmonkey/cloudmonkey.py", line 923, in main 13 shell.cmdloop() 14 File "/Users/kentaro/python/cloudstack-cloudmonkey/cloudmonkey/cloudmonkey.py", line 157, in cmdloop 15 super(CloudMonkeyShell, self).cmdloop(intro="") 16 File "/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/cmd.py", line 138, in cmdloop 17 stop = self.onecmd(line) 18 File "/usr/local/Cellar/python3/3.5.2_1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/cmd.py", line 216, in onecmd 19 return self.default(line) 20 File "/Users/kentaro/python/cloudstack-cloudmonkey/cloudmonkey/cloudmonkey.py", line 461, in default 21 args[1:])[x] for x in range(len(args) - 1)) 22 File "/Users/kentaro/python/cloudstack-cloudmonkey/cloudmonkey/cloudmonkey.py", line 461, in <genexpr> 23 args[1:])[x] for x in range(len(args) - 1)) 24TypeError: 'map' object is not subscriptable 25

python3 でmapの挙動が変わったらしいまではわかったのですが、次のコードが何をやっているのか全く分からず、困っています。 コードを説明してもらえませんでしょうか。

python

1 args_dict = dict(map(lambda x: [x.partition("=")[0], 2 x.partition("=")[2]], 3 args[1:])[x] for x in range(len(args) - 1))

答え (途中)
lambda は無名関数

python

1>>>g = lambda x: [x.partition("=")[0], x.partition("=")[2]] 2 3>>>g("command=listApis") 4['command', 'listApis']

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

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

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

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

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

guest

回答1

0

引数を分割して辞書にしたいだけですね。
その際、最初の引数は自分自身が入っているので無視してます。
正確にはargsはどこからきてるかわかりませんが、そういう処理をしているし、コマンドライン引数かなと思います。

  • xはargsの数-1回ループ
  • args[1:]なのでここで最初の要素を削っている
  • なので、argsの2個目以降をmapにかける
  • mapで=の前後を取る(partitionなのは値の方の=は残すため)

(python2.7)

python

1import sysargs = sys.argv 2print(args) 3args_dict = dict(map(lambda x: [x.partition("=")[0], 4 x.partition("=")[2]], 5 args[1:])[x] for x in range(len(args) - 1)) 6 7print(args_dict)
>python argsss.py A=1 B=4 C=D=9 ['argsss.py', 'A=1', 'B=4', 'C=D=9'] {'A': '1', 'C': 'D=9', 'B': '4'}

投稿2016/08/28 03:41

編集2016/08/28 03:43
flied_onion

総合スコア2604

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問