python初心者です。
pythonのリスト['a=1 b=2 c=3', 'a=2 b=3, c=4']となっているときにaの値のみを別のリストに入れるにはどうしたら良いでしょうか。
具体的には[1, 2]という出力が欲しいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
こんにちは
a
の値を得るために、以下の手順を考えました。
'a=1 b=2 c=3'
という文字列から{ 'a':1, 'b':2, 'c':3 }
というdictを得る関数get_dict
を作っておき、- この関数によって、所与の文字列のリスト
text
から、dictのリストdicts
を作り、 dicts
から'a'
の値のリストを得る
以下、上記をコードにしたものです。
python3
1import re 2 3 4def get_dict(params_str): 5 params = re.split(r',?\s+', params_str) 6 return dict([re.split(r'=', param) for param in params]) 7 8 9if __name__=='__main__': 10 text = ['a=1 b=2 c=3', 'a=2 b=3, c=4'] 11 dicts = [get_dict(params_str) for params_str in text] 12 a_values = [int(d['a']) for d in dicts] 13 14 print(a_values) # => [1, 2] 15
- 動作確認用 Repl.it: https://repl.it/@jun68ykt/Q250113
上記の get_dict
は、ご質問にある text
の要素のパターンから正規表現を作っているので、微妙なところでご質問とは異なるパターンが text
の要素に出現すると対応できなくなりますが、その都度、get_dict
で使っている正規表現を見直すなどして対応していけばよいかと思います。
以上参考になれば幸いです。
追記
別の方法を挙げておきます。'a=1 b=2 c=3'
という文字列に含まれるスペースを &
で置き換えると、
'a=1&b=2&c=3'
が得られますが、これはURLの一部を構成するクエリ文字列の形式なので、これをパースするモジュールの力を借りることができます。以下は、この考え方によって、関数get_dict
を修正したコードです。
python3
1from urllib.parse import parse_qs 2 3 4def get_dict(params_str): 5 qs = params_str.replace(' ', '&') 6 return parse_qs(qs) 7 8if __name__=='__main__': 9 text = ['a=1 b=2 c=3', 'a=2 b=3 c=4'] 10 dicts = [get_dict(params_str) for params_str in text] 11 a_list = [int(d['a'][0]) for d in dicts] 12 print(a_list) 13 14
-
動作確認用 Repl.it: https://repl.it/@jun68ykt/Q2501132
投稿2020/03/29 08:12
編集2020/03/29 08:54総合スコア9058
0
['a=1 b=2 c=3', 'a=2 b=3, c=4']
ここの仕様(たとえば、このリストには 'b=1 a=3 c=2' もくるのかとか、 'a=3.2 b=1 c=3' もくるのかとか)が明記されていないのでなんとも回答しにくいのですが、1行で書くとこんな感じです。
python
1import re 2[int(re.match(r'(^|.* )a=(\d*)($| .*)',item).group(2)) for item in ['a=1 b=2 c=3', 'a=2 b=3, c=4']]
利用している技術は以下のとおりです。
投稿2020/03/29 07:20
編集2020/03/29 07:32総合スコア3401
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/29 08:32
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/29 08:37
2020/03/29 08:40