这是我的字典:
a = [{"id":1,"data":{"age":16,"name":a}},
{"id":3,"data":{"age":35,"name":b}},
{"id":2,"data":{"age":9,"name":c}}]
我希望按照“年龄”字段进行排序。
使用 lambda
我会这样写:
sorted(a, key=lambda k: k['data']['age'])
如何使用
itemgetter
实现这个功能?这是我的字典:
a = [{"id":1,"data":{"age":16,"name":a}},
{"id":3,"data":{"age":35,"name":b}},
{"id":2,"data":{"age":9,"name":c}}]
我希望按照“年龄”字段进行排序。
使用 lambda
我会这样写:
sorted(a, key=lambda k: k['data']['age'])
itemgetter
实现这个功能?你最好先在"a"、"b"和"c"上加引号,否则你会在字典a和字符"a"之间产生混淆。
a = [{"id":1,"data":{"age":16,"name":"a"}},
{"id":3,"data":{"age":35,"name":"b"}},
{"id":2,"data":{"age":9,"name":"c"}}]
对于 itemgetter
:
from operator import itemgetter
a = [{"id":1,"data":{"age":16,"name":"a"}},
{"id":3,"data":{"age":35,"name":"b"}},
{"id":2,"data":{"age":9,"name":"c"}}]
l=sorted(a, key = lambda k : itemgetter('age')(itemgetter('data')(k)) )
print (l)
你可以这样使用它:
sorted(a, key = lambda k : itemgetter('age')(itemgetter('data')(k)) )
输出:
[{'data': {'age': 9, 'name': 'c'}, 'id': 2},
{'data': {'age': 16, 'name': 'a'}, 'id': 1},
{'data': {'age': 35, 'name': 'b'}, 'id': 3}]
itemgetter
来实现什么目标? - NPEsorted(a, key = lambda k : itemgetter('age')(itemgetter('data')(k)))
,但这并没有比sorted(a, key=lambda k: k['data']['age'])
更好。在这种情况下,我建议放弃使用itemgetter
。 - Steven Rumbalskiitemgetter
并不适用于访问嵌套结构。它提供了一种非常简单的从序列中访问元素的方式,但对于更复杂的情况,使用函数/lambda是更好的选择。其他情况也是如此。例如,partial
可用于提供一些位置参数,但如果您想指定第二个位置参数并留下第一个没有值,则最好使用lambda
(尽管有陷阱...例如,在循环中创建lambda
时要小心)。 - Bakuriukey=compose(itemgetter('age'), itemgetter('data'))
。 - chepner