Python 使用lambda解包变量

Python 使用lambda解包变量,python,python-3.x,Python,Python 3.x,其他背景: while True: Surface = input(Fmt.cleaveSurface).split('-');print('\n') if Surface != [''] and (len(Surface) == 2): [ self.cleaved.update({i + 1 : [*layers[i]]}) for i in range(int(Surfac

其他背景:

    while True:
        Surface = input(Fmt.cleaveSurface).split('-');print('\n')
        if Surface != [''] and (len(Surface) == 2): 

            [
            self.cleaved.update({i + 1 : [*layers[i]]}) 
            for i in range(int(Surface[0]),int(Surface[1])+1)
            ]

        else: print('Exiting...\n'); raise SystemExit

        for i in range(len(self.cleaved)):
            if self.format == 'Abinit':
                cellSort = sorted(self.cleaved.items(), 
                    key = lambda x:(x[1][0],x[1][self.sortBy[0]]));
                print(Fmt.abinit.format(*cellSort[i][1][1:4],cellSort[i][1][0]))

            if self.format in ['','Quantum']:
                cellSort = sorted(self.cleaved.items(), 
                    key = lambda x: (x[1][self.sortBy[0]],x[1][self.sortBy[1]],x[1][self.sortBy[2]]))
                print(Fmt.quantum.format(*cellSort[i][1]))

        netCharge = int(sum([self.charges.get(data[0], 'Null') for data in self.cleaved.values()]));
我想澄清一下这句话:

layeredCell = sorted(cell.items(), 
key = lambda x:(x[1][self.sortBy[0]],x[1][self.sortBy[1]],x[1][self.sortBy[2]]))
以下是self.claved格式的示例:

{ 2: ['O', 0.01, -0.8, -0.195], 3: ['Pb', -0.251, -0.574, -0.1135],     ...
self.sortBy
是一个1,2,3的排列列表,它指示self.cleved的排序顺序

示例:
sortBy=[3,1,2]

我不确定解包操作符需要使用什么语法,但我猜它类似于
*[x[1][*self.sortBy[:3]]

我们可以使用列表理解来做类似的事情

key = lambda x: tuple(x[1][self.sortBy[i]] for i in range(3))

我们可以使用列表理解来做类似的事情

key = lambda x: tuple(x[1][self.sortBy[i]] for i in range(3))

您可以尝试一下,看看它是否会引发错误。请阅读并共享一个输入和预期输出示例,以便其他人可以帮助您了解什么是
x
?这将取决于
x[1]
是什么,以及
self.sortBy[:3]
返回什么。它可能是
lambda x:[x[1]+self.sortBy[:3]
。或者,
[x[1],*self.sortBy[:3]]
。您可以尝试一下,看看它是否会引发错误。还请阅读并分享一个输入和预期输出示例,以便其他人能够帮助您了解什么是
x
?这将取决于
x[1]
是什么以及
self。sortBy[:3]
返回什么。它可以是
lambda x:[x[1]]+self.sortBy[:3]]
。或者可能是
[x[1],*self.sortBy[:3]]
。您可以跳过额外的括号并在范围内开始索引:
lambda x:tuple(x[1][self.sortBy[i]]用于范围(3)中的i)
您可以跳过额外的括号并在范围内开始索引:
lambda x:tuple(x[1][self sortBy[i]]用于范围(3)中的i)