我在下面列出了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从高到低排序。
答案 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/