2011/2/8, Paul Rubin <[email protected]>:
> noydb <[email protected]> writes:
>> I am looking for ways to go about capturing the frequency of unique
>> values in one field in a dbf table which contains ~50k records. The
>> values are numbers with atleast 5 digits to the right of the decimal,
>> but I want the frequency of values to only 2 decimal places. I do
>> have a method to do this courtesy of a provided tool in ArcGIS. Was
>> just curious about ways to do it without arcgis sw, using just python.
>...
>
> from decimal import Decimal as D
> from collections import defaultdict
>
> records = ['3.14159','2.71828','3.142857']
>
> td = defaultdict(int)
> for x in records:
> td[D(x).quantize(D('0.01'))] += 1
>
> print td
>
>>...
Another variant of the above code using collections.Counter (in newer
python versions);
The actual frequency counting code is actually the single
instantiation of the Counter from an iterable. The appropriate
handling of the number values might be tweaked as needed.
>>> from decimal import Decimal as D
>>> from collections import Counter
>>> records = ['3.14159','2.71828','3.142857']
>>> Counter(D(x).quantize(D('0.01')) for x in records)
Counter({Decimal('3.14'): 2, Decimal('2.72'): 1})
>>>
vbr
--
http://mail.python.org/mailman/listinfo/python-list