-
-
Notifications
You must be signed in to change notification settings - Fork 24
Open
Description
Thank you for a great library!
I would like to sort a list of dicts by multiple values - some possibly in Unicode - sample program:
from pyuca import Collator
from operator import itemgetter
coll = Collator()
def multisort_list_of_dicts(xs, specs):
for key, reverse, col in reversed(specs):
if col:
xs.sort(key=coll.sort_key(itemgetter(key)), reverse=reverse)
else:
xs.sort(key=itemgetter(key), reverse=reverse)
return xs
data = [{'k1': 'd', 'k2': 10},{'k1': 'č', 'k2': 10},{'k1': 'a', 'k2': 20},{'k1': 'a', 'k2': 10}]
Standard sorting:
sort_spec = (('k2', False, False), ('k1', False, False))
for item in multisort_list_of_dicts(data, sort_spec):
print(item)
- works as expected - with the accented chars shifted after normal chars:
{'k1': 'a', 'k2': 10}
{'k1': 'd', 'k2': 10}
{'k1': 'č', 'k2': 10}
{'k1': 'a', 'k2': 20}
Unicode sorting for k1:
sort_spec = (('k2', False, False), ('k1', False, True))
for item in multisort_list_of_dicts(data, sort_spec):
print(item)
-
this obviously cannot work, because sort_key() expects a string:
def sort_key(self, string):
File "C:\Programs\Python\Python311\Lib\site-packages\pyuca\collator.py", line 119, in sort_key
normalized_string = unicodedata.normalize("NFD", string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: normalize() argument 2 must be str, not operator.itemgetter
How to get the desired output with pyuca ?
{'k1': 'a', 'k2': 10}
{'k1': 'č', 'k2': 10}
{'k1': 'd', 'k2': 10}
{'k1': 'a', 'k2': 20}
How to possibly handle the itemgetter input in pyuca ?
filak
Metadata
Metadata
Assignees
Labels
No labels