@Sawa came the closest to what I'd do:
operating_systems = [
{"title"=>"iPhone", "value_percent"=>"42.6"},
{"title"=>"Windows 7", "value_percent"=>"21.3"},
{"title"=>"Android", "value_percent"=>"12.8"},
{"title"=>"Mac OS X", "value_percent"=>"8.5"},
{"title"=>"Windows 8.1", "value_percent"=>"6.4"},
{"title"=>"Windows XP", "value_percent"=>"4.3"},
{"title"=>"Linux", "value_percent"=>"2.1"},
{"title"=>"Windows Vista", "value_percent"=>"2.1"}
]
operating_systems.map(&:values).to_h
# => {"iPhone"=>"42.6",
# "Windows 7"=>"21.3",
# "Android"=>"12.8",
# "Mac OS X"=>"8.5",
# "Windows 8.1"=>"6.4",
# "Windows XP"=>"4.3",
# "Linux"=>"2.1",
# "Windows Vista"=>"2.1"}
Which works on Ruby 2.1+.
Or, on older versions of Ruby:
Hash[operating_systems.map(&:values)]
# => {"iPhone"=>"42.6",
# "Windows 7"=>"21.3",
# "Android"=>"12.8",
# "Mac OS X"=>"8.5",
# "Windows 8.1"=>"6.4",
# "Windows XP"=>"4.3",
# "Linux"=>"2.1",
# "Windows Vista"=>"2.1"}
If folding the keys to lowercase is needed use these to replace the above commands:
operating_systems.map{ |h| k, v = h.values; [k.downcase, v] }.to_h
# => {"iphone"=>"42.6",
# "windows 7"=>"21.3",
# "android"=>"12.8",
# "mac os x"=>"8.5",
# "windows 8.1"=>"6.4",
# "windows xp"=>"4.3",
# "linux"=>"2.1",
# "windows vista"=>"2.1"}
Hash[operating_systems.map{ |h| k, v = h.values; [k.downcase, v] }]
# => {"iphone"=>"42.6",
# "windows 7"=>"21.3",
# "android"=>"12.8",
# "mac os x"=>"8.5",
# "windows 8.1"=>"6.4",
# "windows xp"=>"4.3",
# "linux"=>"2.1",
# "windows vista"=>"2.1"}