pythonの辞書にはsetdefaultという便利なメソッドがあって、キーに対する値がないときのデフォルト値を渡すことができる
data = [('japan', 'tokyo'), ('uk', 'london'), ('japan', 'osaka')] h = {} for country, city in data: h.setdefault(country, []).append(city) print h # => {'japan': ['tokyo', 'osaka'], 'uk': ['london']}
rubyだとどうかなと思ってちょっとだけ調べたけど、なさそうだったので普通に書いてみました
data = [['japan', 'tokyo'], ['uk', 'london'], ['japan', 'osaka']] h = Hash.new() data.each do |country, city| (h[country.to_sym] ||= []) << city end puts h # => {:japan=>["tokyo", "osaka"], :uk=>["london"]}