REQ: Small Perl to Python conversion needed

Steven Bethard steven.bethard at gmail.com
Thu Jun 2 20:32:45 EDT 2005


Koncept wrote:
> #!/usr/bin/perl
> 
> # Parse comma delimited lines and create a final frequency hash
> # Real example would read a file line by line
> my %dict = {};
> my @lines = ( "1,2,3,4,5", "2,3,4,5", "3,4,5", "4,5", "5" );
> foreach(@lines) { map( $dict{ $_ }++, split( "," ) ); }
> foreach( sort byKeys keys %dict ) {
>   print "Key: $_\tFrequency: ", "*" x $dict{ $_ }, "\n"
>     if $dict{ $_ } =~ /\d+/g;
> }
> sub byKeys { $dict{$b} <=> $dict{$a} }
> 
> __DATA__
> Results:
> Key: 5  Frequency: *****
> Key: 4  Frequency: ****
> Key: 3  Frequency: ***
> Key: 2  Frequency: **
> Key: 1  Frequency: *

I don't speak Perl, but based on your output, I'd probably do something 
like:

py> lines = ["1,2,3,4,5", "2,3,4,5", "3,4,5", "4,5", "5"]
py> counts = {}
py> for items in lines:
...    for item in items.split(','):
...        counts[item] = counts.get(item, 0) + 1
...
py> for key in sorted(counts, key=counts.__getitem__, reverse=True):
...     print 'Key: %s  Frequency: %s' % (key, '*'*counts[key])
...
Key: 5  Frequency: *****
Key: 4  Frequency: ****
Key: 3  Frequency: ***
Key: 2  Frequency: **
Key: 1  Frequency: *

I'm probably missing a few subtleties, but hopefully this will get you 
started.

STeVe



More information about the Python-list mailing list