Как я могу изменить вывод? (Python, списки, словари помогают)

Возможный дубликат:
изменение вывода

Это код:

def voting_borda(args):
    results = {}
    for sublist in args:
        for i in range(0, 3):
            if sublist[i] in results:
                results[sublist[i]] += 3-i
            else:
                results[sublist[i]] = 3-i

    winner = max(results, key=results.get)
    return winner, results

print(voting_borda(
    ['GREEN','NDP', 'LIBERAL', 'CPC'],
    ['GREEN','CPC','LIBERAL','NDP'],
    ['LIBERAL','NDP', 'CPC', 'GREEN']
))

Произведенный результат

"('GREEN', {'LIBERAL': 5, 'NDP': 4, 'GREEN': 6, 'CPC': 3})"

Мне не нужны названия партий в выводе (либеральная, ндп, зеленая и cpc). Мне просто нужны значения. Как я могу отредактировать код, чтобы добиться этого?

редактировать:

сообщение об ошибке, которое я получил после тестирования приведенного выше кода (с: >>>voting_borda([['NDP', 'CPC', 'GREEN', 'LIBERAL'],['NDP', 'CPC', 'LIBERAL', 'ЗЕЛЕНЫЙ'],['НДП', 'КПК', 'ЗЕЛЕНЫЙ', 'ЛИБЕРАЛЬНЫЙ']])

Отслеживание (последний последний вызов): файл "", строка 1, в голосовании_борда([['НДП', 'КПК', 'ЗЕЛЕНЫЙ', 'ЛИБЕРАЛЬНЫЙ'], ['НДП', 'КПК', 'ЛИБЕРАЛЬНЫЙ', 'ЗЕЛЕНЫЙ'],['НДП', 'КПК', 'ЗЕЛЕНЫЙ', 'ЛИБЕРАЛЬНЫЙ']]) Файл "C:\Users\mycomp\Desktop\work\voting_systems.py", строка 144, в голосовании_борда победитель = макс. (результаты, ключ=results.get) NameError: глобальное имя «результаты» не определено


person عائشة نديم    schedule 02.12.2012    source источник
comment
Смотрите мой пост. Он охватывает оба.   -  person asheeshr    schedule 02.12.2012
comment
Большое спасибо! Я могу эффективно запускать свой модуль, однако, когда я пробую тестовый пример, он выдает ошибку, говоря, что глобальное имя «результаты» не определено, как я могу это исправить? заранее спасибо   -  person عائشة نديم    schedule 02.12.2012
comment
Посмотри мой пост, внес изменения. Это то, что вы делаете?   -  person asheeshr    schedule 02.12.2012
comment
Да, я добавил победителя возврата, list(results.values()) вместо победителя возврата, результатов и оставил остальную часть кода прежней.   -  person عائشة نديم    schedule 02.12.2012
comment
Разместите свой код в вопросе с сообщением об ошибке под исходным вопросом.   -  person asheeshr    schedule 02.12.2012
comment
Ваши одноклассники уже задавали этот вопрос и также здесь   -  person Burhan Khalid    schedule 02.12.2012


Ответы (2)


Для Python 2.7:

return winner, [value for value in results.values()])

Для Python 3.x:

return winner, list(results.values())
person asheeshr    schedule 02.12.2012
comment
Почему бы не просто return winner, results.values() ? (или list(results.values()) в 3.x? - person Jon Clements♦; 02.12.2012
comment
@JonClements results.values() возвращает объект dict_values(), который является итерируемым, но не выглядит чистым при печати - person asheeshr; 02.12.2012
comment
Я упомянул варианты 2.x и 3.x... - person Jon Clements♦; 02.12.2012
comment
@JonClements Где упоминается? - person asheeshr; 02.12.2012
comment
(или list(results.values()) в 3.x? — Джон Клементс 13 минут назад - person Jon Clements♦; 02.12.2012

Очень старомодный Python:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

myResults=(['GREEN','NDP', 'LIBERAL', 'CPC'],
    ['GREEN','CPC','LIBERAL','NDP'],
    ['LIBERAL','NDP', 'CPC', 'GREEN'])

def count(results):
  counter = dict()
  for resultList in results:
    for result in resultList:
      if not(result in counter):
        counter[result] = 1
      else:
        counter[result] += 1
  print "counter (before): %s" % counter
  return counter.values()


if __name__ == "__main__":
  print "%s" % count(myResults)

Если вы используете Python >= 2.7, проверьте "коллекции.Counter» (как объяснено в этом вопросе)

person BorrajaX    schedule 02.12.2012