【问题标题】:How to pass a list of variables to a function as a "list" of arguments?如何将变量列表作为参数“列表”传递给函数?
【发布时间】:2021-11-03 17:15:14
【问题描述】:

我正在尝试构建一个函数,该函数通过一个或多个键对字典列表进行排序,将键列表作为变量传递给函数(因此,作为字符串列表)。

通过关注this thread,我安排了几行代码,这些代码按字典的键对列表进行排序:

import operator
newlist = sorted( list_to_be_sorted, key=operator.itemgetter('key1','key2') )

示例:

list_to_be_sorted = [
                      {'name':'Homer', 'age':39, 'height':170}, 
                      {'name':'Milhouse', 'age':10, 'height':110}, 
                      {'name':'Bart', 'age':10, 'height':112} 
                    ]

newlist = sorted( list_to_be_sorted, key=operator.itemgetter('age','name') ) # My_line

print(newlist)

[{'name': 'Bart', 'age': 10, 'height':112},
{'name': 'Milhouse', 'age': 10, 'height':110} ,
{'name': 'Homer', 'age': 39, 'height':170}]

现在我要构建的是一个函数,它调用在 My_line 中定义的函数并将其作为输入:

  1. list_to_be_sorted

  2. 变量列表,其中每个变量值将作为参数传递给 My_line 函数中的key=operator.itemgetter

所以我希望这样定义该函数:

def order_list_of_dicts_by_keys( list_to_be_sorted, keys_list ):
    pass

这里是keys_list = ['age','name']

所以我遇到了这个问题,就是:

如何将变量列表作为 参数“列表”?

这是我尝试过的:

import operator

def order_list_of_dicts_by_keys(list_to_be_sorted, keys_strings):       
    items = tuple(keys_strings)
    sorted_list = sorted(list_to_be_sorted, key=operator.itemgetter( items )
    return sorted_list

如何“剥离”其括号中的 items 元组,以便将正确的表达式传递给 key=operator.itemgetter

【问题讨论】:

标签: python tuples arguments


【解决方案1】:

已解决

不可能“剥离”其括号的元组,但可以使用解包运算符*

“解包”

所以函数变成:

import operator

def order_list_of_dicts_by_keys(list_to_be_sorted, keys_list):
    items = tuple(keys_list)
    return sorted(list_to_be_sorted, key=operator.itemgetter(*items))

【讨论】:

  • 你的意思是strip吗?