Python-trim-last和sort-lis

2024-10-03 19:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下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从高到低排序。在


Tags: number列表returndefmcrxfnaig
1条回答
网友
1楼 · 发布于 2024-10-03 19:24:35
  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

问题是,该函数本应在一个数字的字符串表示上运行,但您传递给它的却是一个元组。所以只要拉元组的第一个元素。如果第1个元素是可转换的,则返回由第0个元素和转换后的第1个元素组成的元组,或者只返回元组。在

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

至于排序,使用sortedkey关键字参数

或者:

^{pr2}$

按股票代码或

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

按价格分类。如果你想把高的放低一点:

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

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

相关问题 更多 >