Python修剪最后和排序列表

时间:2010-09-12 21:16:58

标签: python sorting

我在下面列出了MC:

MC = [('GGP', '4.653B'), ('JPM', '157.7B'), ('AIG', '24.316B'), ('RX', 'N/A'), ('PFE', '136.6B'), ('GGP', '4.653B'), ('MNKD', '672.3M'), ('ECLP', 'N/A'), ('WYE', 'N/A')]


def fn(number):
    divisors = {'B': 1, 'M': 1000}
    if number[-1] in divisors:
        return ((float(number[:-1]) / divisors[number[-1]])
    return number

map(fn, MC)

如何使用fn删除B,M,并将列表mc从高到低排序。

1 个答案:

答案 0 :(得分:1)

  def fn(tup):
        number = tup[1]
        divisors = {'B': 1, 'M': 1000}
        if number[-1] in divisors:
            return (tup[0], float(number[:-1]) / divisors[number[-1]])
        else:
            return tup

问题是该函数是为了在数字的字符串表示上运行,但是你传递了一个元组。所以只需要拉出元组的第一个元素。然后返回由第0个元素和变换的第1个元素组成的元组,如果第1个元素是可变形的或者只返回元组。

另外,我在那里插入了一个else子句,因为我发现它们更具可读性。我不知道哪个更有效率。

就排序而言,使用带有sorted关键字参数的key

或者:

MC = sorted(map(fn, MC), key=lambda x: x[0])

按自动收报机或

排序
MC = sorted(map(fn, MC), key=lambda x: x[1] ) 

按价格排序。如果您想要从高到低,只需将reversed=True传递给reversed

MC = sorted(map(fn, MC), key=lambda x: x[1], reversed=True)

你可以在这里找到其他漂亮的排序技巧:http://wiki.python.org/moin/HowTo/Sorting/