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

回答編集履歴

2

追記

2017/09/28 17:36

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -47,4 +47,26 @@
47
47
  が、言語仕様上それを信頼していいのかは、ちょっと自信がないです。
48
48
 
49
49
  [collections.OrderedDict](https://docs.python.jp/3/library/collections.html#collections.OrderedDict)とかもありますが...
50
- リストで対応できる場合はそうした方が手間がかからないかと思います。
50
+ リストで対応できる場合はそうした方が手間がかからないかと思います。
51
+
52
+ ついでに
53
+ ---
54
+ 同様のエラーを起こしてみた。
55
+ ```Python
56
+ >>> a = np.array([1])
57
+ >>> a
58
+ array([1])
59
+ >>> a.shape
60
+ (1,)
61
+ >>> a.shape[0]
62
+ 1
63
+ >>> b = np.array(1)
64
+ >>> b
65
+ array(1)
66
+ >>> b.shape
67
+ ()
68
+ >>> b.shape[0]
69
+ Traceback (most recent call last):
70
+ File "<stdin>", line 1, in <module>
71
+ IndexError: tuple index out of range
72
+ ```

1

修正

2017/09/28 17:36

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -12,10 +12,10 @@
12
12
  `object`型、詳しく言うと`dict_value`型の単一の要素が格納されているようです。
13
13
 
14
14
  ---
15
- [リファレンス](https://docs.python.jp/3/library/stdtypes.html#dict.values)を見てみると、次のように書いてあります。
15
+ `dict.values()`の[リファレンス](https://docs.python.jp/3/library/stdtypes.html#dict.values)を見てみると、次のように書いてあります。
16
16
  > 辞書の値の新しいビューを返します。[ビューオブジェクトのドキュメント](https://docs.python.jp/3/library/stdtypes.html#dict-views) を参照してください。
17
17
 
18
- `dict.values()`の返り値はリストではないのです。
18
+ 返り値はリストではないのです。
19
19
  よって、次のように明示的にリストに変換すれば、エラーは解消されます。
20
20
  ```Python
21
21
  maxids = signal.argrelmax(
@@ -30,7 +30,7 @@
30
30
 
31
31
  ---
32
32
  ...しかし。辞書型は通常、要素の順序を指定できません。
33
- ですので、結果がインデックスの形で返されても、本当に正しく参照できるのかは微妙です。
33
+ ですので、結果がインデックスの形で返されても、本当に正しく参照できるのかは微妙です。
34
34
 
35
35
  ご提示のサンプルデータを見てみると、keyは単に0~254の整数のようですね。
36
36
  このような場合は、最初からリスト形式のコンテナを用いることをお勧めします。
@@ -40,4 +40,11 @@
40
40
  array = np.array([counted_hsv_dic[i] for i in range(255)])
41
41
  ```
42
42
 
43
- ...もっと簡単な方法があるかも。
43
+ ...もっと簡単な方法があるかも。
44
+
45
+ ---
46
+ ※私の環境では、`counted_hsv_dic`の順序は崩れませんでした。
47
+ が、言語仕様上それを信頼していいのかは、ちょっと自信がないです。
48
+
49
+ [collections.OrderedDict](https://docs.python.jp/3/library/collections.html#collections.OrderedDict)とかもありますが...
50
+ リストで対応できる場合はそうした方が手間がかからないかと思います。