Python如何将列表拆分为多个参数传入函数实现字典列表多键排序
解决方法
你需要使用Python的序列解包运算符(*)来拆分元组/列表,把其中的元素作为独立的位置参数传入operator.itemgetter即可。
原来的代码错误点是你直接把整个元组items作为单个参数传给了operator.itemgetter,这会导致它尝试从字典中获取整个元组对应的键,不符合预期逻辑。
修正后的完整函数代码:
import operator def order_list_of_dicts_by_keys(list_to_be_sorted, keys_strings): sorted_list = sorted(list_to_be_sorted, key=operator.itemgetter(*keys_strings)) return sorted_list
调用测试:
list_to_be_sorted = [ {'name':'Homer', 'age':39, 'height':170}, {'name':'Milhouse', 'age':10, 'height':110}, {'name':'Bart', 'age':10, 'height':112} ] print(order_list_of_dicts_by_keys(list_to_be_sorted, ['age', 'name']))
输出结果:
[{'name': 'Bart', 'age': 10, 'height': 112}, {'name': 'Milhouse', 'age': 10, 'height': 110}, {'name': 'Homer', 'age': 39, 'height': 170}]
补充说明:
*keys_strings的作用就是把keys_strings列表里的每个元素拆成独立的位置参数,等价于手动写operator.itemgetter('age', 'name')- 不需要额外把输入的键列表转成元组,列表也可以直接用
*解包
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

