teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

テキスト追加

2020/03/29 08:54

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  別の方法を挙げておきます。`'a=1 b=2 c=3'` という文字列に含まれるスペースを `&`で置き換えると、
40
40
  `'a=1&b=2&c=3'`
41
- が得られますが、これはURLの一部を構成するクエリ文字列の形式なので、これをパースするモジュールの力を借りることができます。以下は、この考え方によコードです。
41
+ が得られますが、これはURLの一部を構成するクエリ文字列の形式なので、これをパースするモジュールの力を借りることができます。以下は、この考え方によって、関数`get_dict` を修正したコードです。
42
42
 
43
43
 
44
44
  ```python3

5

テキスト追加

2020/03/29 08:54

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -46,7 +46,8 @@
46
46
 
47
47
 
48
48
  def get_dict(params_str):
49
- return parse_qs(params_str.replace(' ', '&'))
49
+ qs = params_str.replace(' ', '&')
50
+ return parse_qs(qs)
50
51
 
51
52
  if __name__=='__main__':
52
53
  text = ['a=1 b=2 c=3', 'a=2 b=3 c=4']

4

テキスト追加

2020/03/29 08:52

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -54,6 +54,7 @@
54
54
  a_list = [int(d['a'][0]) for d in dicts]
55
55
  print(a_list)
56
56
 
57
+
57
58
  ```
58
59
  - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q2501132](https://repl.it/@jun68ykt/Q2501132)
59
60
 

3

テキスト追加

2020/03/29 08:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -42,11 +42,11 @@
42
42
 
43
43
 
44
44
  ```python3
45
- import urllib.parse
45
+ from urllib.parse import parse_qs
46
46
 
47
47
 
48
48
  def get_dict(params_str):
49
- return urllib.parse.parse_qs(params_str.replace(' ', '&'))
49
+ return parse_qs(params_str.replace(' ', '&'))
50
50
 
51
51
  if __name__=='__main__':
52
52
  text = ['a=1 b=2 c=3', 'a=2 b=3 c=4']

2

テキスト追加

2020/03/29 08:45

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  別の方法を挙げておきます。`'a=1 b=2 c=3'` という文字列に含まれるスペースを `&`で置き換えると、
40
40
  `'a=1&b=2&c=3'`
41
- が得られますが、これはURLの一部を構成するクエリパラ文字列の形式なので、これをパースするモジュールの力を借りることができます。以下は、この考え方によるコードです。
41
+ が得られますが、これはURLの一部を構成するクエリ文字列の形式なので、これをパースするモジュールの力を借りることができます。以下は、この考え方によるコードです。
42
42
 
43
43
 
44
44
  ```python3

1

テキスト追加

2020/03/29 08:41

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -31,4 +31,31 @@
31
31
 
32
32
  上記の `get_dict`は、ご質問にある `text` の要素のパターンから正規表現を作っているので、微妙なところでご質問とは異なるパターンが `text` の要素に出現すると対応できなくなりますが、その都度、`get_dict` で使っている正規表現を見直すなどして対応していけばよいかと思います。
33
33
 
34
- 以上参考になれば幸いです。
34
+ 以上参考になれば幸いです。
35
+
36
+
37
+ ### 追記
38
+
39
+ 別の方法を挙げておきます。`'a=1 b=2 c=3'` という文字列に含まれるスペースを `&`で置き換えると、
40
+ `'a=1&b=2&c=3'`
41
+ が得られますが、これはURLの一部を構成するクエリパラ文字列の形式なので、これをパースするモジュールの力を借りることができます。以下は、この考え方によるコードです。
42
+
43
+
44
+ ```python3
45
+ import urllib.parse
46
+
47
+
48
+ def get_dict(params_str):
49
+ return urllib.parse.parse_qs(params_str.replace(' ', '&'))
50
+
51
+ if __name__=='__main__':
52
+ text = ['a=1 b=2 c=3', 'a=2 b=3 c=4']
53
+ dicts = [get_dict(params_str) for params_str in text]
54
+ a_list = [int(d['a'][0]) for d in dicts]
55
+ print(a_list)
56
+
57
+ ```
58
+ - **動作確認用 Repl.it:** [https://repl.it/@jun68ykt/Q2501132](https://repl.it/@jun68ykt/Q2501132)
59
+
60
+
61
+ - **参考:** [urllib.parse.parse_qs](https://docs.python.org/ja/3/library/urllib.parse.html#urllib.parse.parse_qs)