-2

重複の可能性:
出力の変更

これはコードです:

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})"

出力にパーティ名(liberal、ndp、green、cpc)を含めたくないのですが、必要なのは値だけです。それを実現するためにコードを編集するにはどうすればよいですか?

編集:

上記のコードをテストした後に表示されたエラーメッセージ(with:>>>voting_borda([['NDP'、'CPC'、'GREEN'、'LIBERAL']、['NDP'、'CPC'、'LIBERAL'、 'GREEN']、['NDP'、'CPC'、'GREEN'、'LIBERAL']])

トレースバック(最後の最後の呼び出し):ファイル ""、1行目、voting_borda([['NDP'、'CPC'、'GREEN'、'LIBERAL']、['NDP'、'CPC'、'LIBERAL'、 'GREEN']、['NDP'、'CPC'、'GREEN'、'LIBERAL']])ファイル "C:\ Users \ mycomp \ Desktop \ work \ voting_systems.py"、144行目、voting_borda勝者= max (results、key = results.get)NameError:グローバル名'results'が定義されていません

4

2 に答える 2

1

Python 2.7の場合:

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

Python 3.xの場合:

return winner, list(results.values())
于 2012-12-02T03:58:27.993 に答える
0

非常に昔ながらの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を使用している場合は、「collections.Counter 」を確認してください(この質問で説明されています) 。

于 2012-12-02T04:05:17.073 に答える