質問: random.choice(list(row.items())) print(p_plant) ``` ### 試したこと いろいろ調べたのですが、辞書を含んだリストの処理について記述されているものが少なく 質問させていただきました。
回答: for row in reader: と書いたとき、rowにはreaderの要素(**註**)が順に入っていきます。 『いつも最後の辞書が選択されてしまう』のはその為です。 試しにwith文から抜けた後でprint(row)してみて下さい。 常に一つの要素しか入っていません。 ``` with open('plant.csv', newline='') as csvfile: ... print(row) # => {'name': 'キキョウ', 'family': 'キキョウ科', 'character': '秋の七草'} ``` 次のように全要素をしっかり保持してあげる必要があります。 ``` with open('plant.csv', newline='') as csvfile: reader = csv.DictReader(csvfile) rows = [] for row in reader: #print(row) rows.append(row) # rows = list(reader) だけでも可 # 上記DictReaderで読み込んだ辞書リストから、問題用に、ひとつの植物を選択する p_plant = random.choice(rows) print(p_plant) ``` **註**: 実際にはreaderはイテレータなわけなので、ちょっと誤魔化した表現です。