在Jython/Python中排序二维列表

1 投票
1 回答
893 浏览
提问于 2025-05-01 13:59

我正在使用WLST(python/jython)来获取一些WebLogic资源的配置。我在一个jms模块的队列中循环,对于每个队列,我会获取它的名称和其他一些参数。

有了这些信息,我构建了一个二维列表,想按照队列名称进行排序。

在python控制台中,我可以用这两种方法成功做到这一点:

from operator import itemgetter
L=[["queueName1", 1, 2], ["queueName2", 2, 3], ["queueName3", 4, 1]]
sorted(L, key=itemgetter(0))

或者

L=[["queueName1", 1, 2], ["queueName2", 2, 3], ["queueName3", 4, 1]]
sorted(L, key=lambda x: x[0])

但是在我的WL服务器(版本10.3.5)中使用.py脚本时,python/jython的版本(我不太清楚具体用的是哪个)不支持这种做法:

list2d.sort(key=lambda x: x[0])

我收到了这个错误:

Problem invoking WLST - Traceback (innermost last):
  File "/home/user/scripts/pythonscripts/get_jms_config.py", line 98, in ?
  File "/home/user/scripts/pythonscripts/get_jms_config.py", line 69, in getInfo
TypeError: sort() takes no keyword arguments

如果我尝试使用itemgetter,结果也不理想,我得到了以下错误:

Problem invoking WLST - Traceback (innermost last):
  File "/home/user/scripts/pythonscripts/get_jms_config.py", line 5, in ?
ImportError: cannot import name itemgetter

有没有人能给点建议?

编辑:

def getQueueInformation():
    try:
        list2d = []
        j = 1
        jmsSystemResources = cmo.getJMSSystemResources();
        for jmsSystemResource in jmsSystemResources:
            queues = jmsSystemResource.getJMSResource().getQueues();
            for queue in queues:
                # print some information
                row = []
                row.append(queue.getName())
                row.append(str(queue.getDeliveryParamsOverrides().getRedeliveryDelay()))
                row.append(str(queue.getDeliveryFailureParams().getRedeliveryLimit()))

                list2d.append(row)
                j += 1 
        return list2d
    except WLSTException:
        print 'an error occurred...',

祝好,

Deborah

暂无标签

1 个回答

5

听起来你正在使用的是2.4版本之前的Python,而在2.4版本中才引入了.sort(key=...)这个功能。你可以尝试使用cmp()版本的.sort()

list2d.sort(lambda left, right: cmp(left[0], right[0]))

撰写回答