web-dev-qa-db-ja.com

forループからjsonオブジェクトの配列を作成する

私はhtmlから値を抽出し、それらをjson配列に変換しようとしています。これまでのところ、必要なものを取得できましたが、個別の文字列としてのみ取得できます。

2つのforループを実行しました。

for line in games_html.findAll('div', class_="product_score"):
  score= ("{'Score': %s}" % line.getText(strip=True))
  print score

for line in games_html.findAll('a'):
  title= ("{'Title': '%s'}" % line.getText(strip=True))
  print title

次の2つの出力が生成されます。

{'Title': 'Uncanny Valley'}
{'Title': 'Subject 13'}
{'Title': '2Dark'}
{'Title': 'Lethal VR'}
{'Title': 'Earthlock: Festival of Magic'}
{'Title': 'Knee Deep'}
{'Title': 'VR Ping Pong'}

そして

{'Score': 73}
{'Score': 73}
{'Score': 72}
{'Score': 72}
{'Score': 72}
{'Score': 71}
{'Score': 71}

(長いですが、これでアイデアを得ることができます...)

pythonを使用して、次のようなjson配列を作成するにはどうすればよいですか。

[{'Title': 'Uncanny Valley', 'Score': 73}, {....}]

結果の配列を使用して、後で他のことを行います。

ループのアイテムをリストに保存してからマージする必要がありますか?私のシナリオで与えられた例を説明していただけませんか?

私は今までbashしか使用していなかったので、これは私にとって本当にクールな学習体験です。 Pythonとてもセクシーに見えます。

14
geekiechic

スコアとタイトルの2つのリストを維持し、すべてのデータをそれらのリストに追加する必要があります。印刷するのではなく、それらのリストをリスト内包と共にZipとして追加し、目的の出力を次のように取得します。

import json
scores, titles = [], []
for line in games_html.findAll('div', class_="product_score"):
    scores.append(line.getText(strip=True))

for line in games_html.findAll('a'):
    titles.append(line.getText(strip=True))

score_titles = [{"Title": t, "Score": s} for t, s in Zip(titles, scores)]
print score_titles
# Printing in JSON format
print json.dumps(score_titles)
27
ZdaR