def sortProfiles(p):
return sorted(p, key=itemgetter('first_name'))
我有一个包含词典的列表。此函数允许我按first_name对它们进行排序。但是,它区分大小写。
答案 0 :(得分:8)
>>> from operator import itemgetter
>>> p = [{'fn':'bill'}, {'fn':'Bob'}, {'fn':'bobby'}]
>>> sorted(p, key=itemgetter('fn'))
[{'fn': 'Bob'}, {'fn': 'bill'}, {'fn': 'bobby'}]
>>> sorted(p, key=lambda x: x['fn'].lower())
[{'fn': 'bill'}, {'fn': 'Bob'}, {'fn': 'bobby'}]
>>>
答案 1 :(得分:2)
这是一种方式:
return sorted(p, key=lambda x: x['first_name'].lower())
答案 2 :(得分:1)
看起来你想要sorted(p, key=lambda d: d['first_name'].lower())
。
答案 3 :(得分:1)
>>> def my_itemgetter(attr):
def get_attr(obj):
return obj.get(attr, "").lower()
return get_attr
>>> a= [{"a":"dA"},{"a":"ab"},{"a":"Ac"},{"a":"aa"}]
>>> sorted(a, key=my_itemgetter("a"))
[{'a': 'aa'}, {'a': 'ab'}, {'a': 'Ac'}, {'a': 'dA'}]
答案 4 :(得分:1)
def sortProfiles(p):
return sorted(p, key=lambda el: el['first_name'].lower())
答案 5 :(得分:1)
如果你不喜欢lambda
,你可以使用命名函数作为你的密钥提取器,例如:
def sortProfiles(p):
def lowerName(d):
return d['first_name'].lower()
return sorted(p, key=lowerName)
def
语句几乎可以出现在另一个语句的任何位置,包括在另一个函数的主体中。在这种情况下,嵌套的def
,lambda
或def
之外的sortProfiles
之间的选择主要是风格问题,尽管最后一个可以提供一些性能提升。