(我在这里使用Python 2)
我有一个词典列表,比如说
dei = [{'name': u'Thor'}, {'name': u'Œdipus'}, {'name': u'Creon'}]
我想按照'name'
属性对该列表进行排序。这很容易做到:
dei.sort(key=lambda d: d['name'])
现在,因为Python的字母排序是ASCII驱动的,结果将是
[{'name': u'Creon'}, {'name': u'Thor'}, {'name': u'Œdipus'}]
虽然我希望Œdipus介于Creon和Thor之间。
关注this suggestion,我使用PyICU的collator.getSortKey()
函数(让它重命名为sortKey()
以提高可读性),这样就可以在字符串列表strings
上运行:
strings.sort(key=sortKey)
我的问题在于:因为我无论如何都无法修改sortKey()
函数,如何根据某些属性使用它来对更复杂的对象(此处为字典)进行排序?
我目前发现的唯一方法是在单独的列表中提取字典的值,对其进行排序,然后实现自定义compare(a, b)
函数,返回-1,0或1,具体取决于{的索引单独列表中的{1}}和a
,并使用此b
函数调用sort()
:
compare()
我觉得不太优雅。
答案 0 :(得分:0)
您可以使用自己的密钥在内部调用getSortKey
并使用正确的值:
>>> import icu
>>> dei = [{'name': u'Thor'}, {'name': u'Œdipus'}, {'name': u'Creon'}]
>>> collator = icu.Collator.createInstance()
>>> dei.sort(key=lambda x: collator.getSortKey(x['name']))
>>> dei
[{'name': 'Creon'}, {'name': 'Œdipus'}, {'name': 'Thor'}]