my %hash = ( word => 1, second => 3, third => 7 ); ###### my @weighted = (); for %hash.keys -> $key { push @weighted, ( $key ) xx %hash{ $key }; } say @weighted.pick; ###### Basically the same thing: my @weighted = (); push @weighted, ( $_ ) xx %hash{ $_ } for %hash.keys; say @weighted.pick; ###### One-liner style. *Somewhat* based on Roger's above. %hash .keys .map:{ ( $_ ) xx %hash{ $_ } } .pick .say; ## (or actually on one line) %hash.keys.map:{ ( $_ ) xx %hash{ $_ } }.pick.say;