猿问

使用 lambda 解包变量

附加背景:


    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.cleaved 格式的示例:


{ 2: ['O', 0.01, -0.8, -0.195], 3: ['Pb', -0.251, -0.574, -0.1135],     ...

self.sortBy是 1,2,3 的一些排列的列表,它规定了 self.cleaved 的排序顺序


示例:sortBy = [3,1,2] 我不确定解包运算符需要使用什么语法,但我猜它会类似于*[x[1][*self.sortBy[:3]]?


元芳怎么了
浏览 97回答 1
1回答

杨魅力

我们可以使用列表理解来做这样的事情key = lambda x: tuple(x[1][self.sortBy[i]] for i in range(3))
随时随地看视频慕课网APP

相关分类

Python
我要回答