35104


**キーと値のペアをループして下記のような二次元配列を作成したいです**

[[1,'北海道'][13,'東京'][47,'沖縄']]

* * *

**試したけれどもうまくいかないコード**

[code]

    results = []
    i=0
    for item in data:
        results[i][0].append(data.find('areacode').text) //1回目は1
        results[i][1].append(data.find('prefecture').text) //1回目は北海道
        i+=1
    print results
    
[/code]

**表示結果**

> IndexError: list index out of range

* * *

**Q**  
・ループで二次元配列作成するにはどうすれば良いでしょうか？  
・Pythonでは配列という呼び方はしない？ リスト？  
・「キーと値のペア」でデータを保つ場合は、辞書を使用するのでしょうか？  
・辞書の場合はどう作成？？？


CC BY-SA 3.0
2017-05-29T02:56:24.323
35102
2017-05-30T19:01:32.610
7886
question
python
ループで二次元配列作成


dataの中身がよくわからないので、実際に実行して試していませんが、こんな感じでできませんかね。

[code]

    results = []
    i=0
    
    for item in data:
        results.append([item.find('areacode').text, item.find('prefecture').text])
        i+=1
    
    print(results)
    
[/code]

appendの使い方や、配列(リスト)の使い方を間違っているようなので、詳しくはこのあたりを参照ください。  
<http://www.pythonweb.jp/tutorial/list/index6.html>


CC BY-SA 3.0
2017-05-29T03:10:41.907
35103
2017-05-29T03:10:41.907
14540
35102
answer


> ・「キーと値のペア」でデータを保つ場合は、辞書を使用するのでしょうか？  
>  ・辞書の場合はどう作成？？？

このような場合辞書を使うのが良いです。  
例の場合1番目がindex、2番目が都道府県名、のように配列の番号に意味を持ってしまっていますが、  
「基本的には」配列の番号に意味を持たせるべきではないと私は考えます。

辞書の場合以下です。

[code]

    results = {}
    
    for item in data:
        results[item.find('areacode').text] = item.find('prefecture').text
    
    print(results)
    
[/code]

もしくはkeyにフィールドの意味を持たせるのならば  
(こうなってくると元のdataそのまま使っても良い気がしますが・・・)

[code]

    results = []
    
    for item in data:
        results.append({'areacode':item.find('areacode').text,
                        'prefecture':item.find('prefecture').text})
    
    print(results)
    
[/code]


CC BY-SA 3.0
2017-05-29T03:53:33.940
35104
2017-05-29T04:00:28.180
2017-05-29T04:00:28.180
19716
19716
35102
answer


> ・ループで二次元配列作成するにはどうすれば良いでしょうか？

dataの要素がどのようなものか分からないですが、例えば

[code]

    results = [[] for _ in range(data)] # 領域を確保しておく
    i=0
    for item in data:
        results[i].append(item.find('areacode').text)
        results[i].append(item.find('prefecture').text)
        i+=1
    print results
    
[/code]

> ・Pythonでは配列という呼び方はしない？ リスト？

はい。 `results`はリストです。

> ・「キーと値のペア」でデータを保つ場合は、辞書を使用するのでしょうか？

Pythonでは標準で[辞書が用意されて](http://docs.python.jp/3.6/library/stdtypes.html#typesmapping)います。

一般的には場合によるかと思います。（今回の場合はキーの代わりにリストのインデックスが使えるかも知れません。）

> ・辞書の場合はどう作成？？？

`results`を辞書の形で欲しいということであれば

[code]

    results = {} # 空の辞書
    i=0
    for item in data:
        results[item.find('areacode').text] = item.find('prefecture').text
        i+=1
    print results
    
[/code]


CC BY-SA 3.0
2017-05-29T04:11:05.770
35105
2017-05-29T04:11:05.770
13199
35102
answer

[code]

    results = {item.find('areacode').text:item.find('prefecture').text for item in data}
    
[/code]

辞書作るだけなら1行でできる。


CC BY-SA 3.0
2017-05-30T18:54:49.663
35139
2017-05-30T19:01:32.610
2017-05-30T19:01:32.610
22629
22629
35102
answer