質問: 距離+1: 処理3 #駅違う・距離違う場合 else: 処理4 ``` ### 試したこと zip()やenumerate()なども検討しましたが、どうにも正解にたどり着けませんでした。 どうかお力をお貸しいただけないでしょうか。 よろしくお願いいたします。
回答: 「同じメトロなので」とか「同じJRなので」という条件でまとめようとすると、おそらく正確に行うには運営主体対路線名をすべて網羅したデータベースが必要になるかと。ちょっと現実的ではありません。 位置、あるいは距離と駅名が一致していれば同じ場所とみなす、程度であれば簡単に行なえます。 下に示す程度の出力フォーマットで妥協できれば、幸せはすぐそこにあります。 * 後楽園駅 360m 東京メトロ南北線 東京メトロ丸ノ内線 * 水道橋駅 450m 都営三田線 * 水道橋駅 470m JR中央線 JR総武線 * 飯田橋駅 540m 東京メトロ東西線 あとは文字列処理で先頭の一致部分は省略するとか、そういったセコい方法でやれなくはありませんが。どんな路線名でも正しく処理してくれるという保証はありません。 > > 駅名と距離が同じ場合は以下のようにまとめたい > > > とりあえず駅名と距離をキーに、駅の情報のlistを値に入れた辞書を作ってみました。 ``` from collections import defaultdict import requests r = requests.get("http://express.heartrails.com/api/json?method=getStations&x=139.7505027&y=35.7048605") data = r.json()["response"]["station"] d = defaultdict(list) for sttn in data: d[(sttn["name"], sttn["distance"])].append(sttn) for k,v in d.items(): print(k, v) """ => ('飯田橋', '540m') [{'prev': '神楽坂', 'next': '九段下', 'prefecture': '東京都', 'line': '東京メトロ東西線', 'x': 139.745986, 'postal': '1020072', 'y': 35.701725, 'distance': '540m', 'name': '飯田橋'}, {'prev': '牛込神楽坂', 'next': '春日', 'prefecture': '東京都', 'line': '都営大江戸線', 'x': 139.744999, 'postal': '1120004', 'y': 35.702927, 'distance': '540m', 'name': '飯田橋'}] ('水道橋', '470m') [{'prev': '御茶ノ水', 'next': '飯田橋', 'prefecture': '東京都', 'line': 'JR中央線', 'x': 139.754312, 'postal': '1010061', 'y': 35.702039, 'distance': '470m', 'name': '水道橋'}, {'prev': '飯田橋', 'next': '御茶ノ水', 'prefecture': '東京都', 'line': 'JR総武線', 'x': 139.754312, 'postal': '1010061', 'y': 35.702039, 'distance': '470m', 'name': '水道橋'}] ('水道橋', '450m') [{'prev': '神保町', 'next': '春日', 'prefecture': '東京都', 'line': '都営三田線', 'x': 139.75516, 'postal': '1130033', 'y': 35.703398, 'distance': '450m', 'name': '水道橋'}] ('後楽園', '360m') [{'prev': '飯田橋', 'next': '東大前', 'prefecture': '東京都', 'line': '東京メトロ南北線', 'x': 139.751864, 'postal': '1120002', 'y': 35.707898, 'distance': '360m', 'name': '後楽園'}, {'prev': '茗荷谷', 'next': '本郷三丁目', 'prefecture': '東京都', 'line': '東京メトロ丸ノ内線', 'x': 139.751864, 'postal': '1120003', 'y': 35.707898, 'distance': '360m', 'name': '後楽園'}] """ ```