Python обрезать последний и сортировать список - PullRequest
0 голосов
/ 13 сентября 2010

У меня есть список 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)

Как мне удалить B, M с помощью fn и отсортировать список mc по убыванию.

1 Ответ

1 голос
/ 13 сентября 2010
  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-го элемента, если 1-й элемент является трансформируемым, или просто верните кортеж.

Кроме того, я вставил туда еще условие, потому что считаю его более читабельным.Я не знаю, что является более эффективным.

для сортировки используйте 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...