You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by Jack L <jl...@yahoo.ca> on 2007/05/04 22:34:43 UTC

Re[2]: facet.sort does not work in python output

I use this to sort the facet field values against count in
reverse order in Python:

sorted(facet_field_values.items(), lambda x, y: cmp(x[1], y[1]), reverse = True)

Thursday, May 3, 2007, 6:18:05 PM, you wrote:

> We resort it in solr-ruby:

>    def field_facets(field)
>      facets = []
>      values = @data['facet_counts']['facet_fields'][field]
>      Solr::Util.paired_array_each(values) do |key, value|
>        facets << FacetValue.new(key, value)
>      end

>      facets
>    end



> On May 3, 2007, at 8:10 PM, Mike Klaas wrote:

>> On 5/3/07, Jack L <jl...@yahoo.ca> wrote:
>>> The Python output uses nested dictionaries for facet counts.
>>> I read it online that Python dictionaries do not preserve order.
>>> So when a string is eval()'d, the sorted order is lost in the
>>> generated Python object. Is it a good idea to use list to wrap
>>> around the dictionary? This is only needed for the fields, sorted
>>> by counts.
>>
>> This might be fixed in the future, but for now, either resort on the
>> client-side (a one- or zero-liner), or specify json.nl=arrarr (which
>> affects the whole python response structure... probably not
>> recommended).
>>
>> There is some past discussion on the list if you search the archives.
>>
>> -Mike


Re: Re[2]: facet.sort does not work in python output

Posted by Mike Klaas <mi...@gmail.com>.
On 5/4/07, Jack L <jl...@yahoo.ca> wrote:
> I use this to sort the facet field values against count in
> reverse order in Python:
>
> sorted(facet_field_values.items(), lambda x, y: cmp(x[1], y[1]), reverse = True)

FWIW, the key= parameter is generally more efficient for python 2.4+:

sorted(facet.field_values.items(), key=lambda x: x[1], reverse=True)

or even
from operator import itemgetter
sorted(facet.field_values.items(), key=itemgetter(1), reverse=True)

digressionally,
-Mike