2

私はPythonプログラミングに非常に慣れていないので、この問題に関する教科書をまだ購入していません(今日はストアまたはAmazonから購入しています)。それまでの間、私が遭遇した次の問題について私を助けてくれませんか?

私はこのような辞書オブジェクトのリストを持っています:

stock = [ 
  { 'date': '2012', 'amount': '1.45', 'type': 'one'},
  { 'date': '2012', 'amount': '1.4', 'type': 'two'},
  { 'date': '2011', 'amount': '1.35', 'type': 'three'},
  { 'date': '2012', 'amount': '1.35', 'type': 'four'}
]

リストを金額の日付列で並べ替えてから、金額の列で並べ替えて、並べ替えられたリストが次のようになるようにします。

stock = [ 
  { 'date': '2011', 'amount': '1.35', 'type': 'three'},
  { 'date': '2012', 'amount': '1.35', 'type': 'four'},
  { 'date': '2012', 'amount': '1.4', 'type': 'two'},
  { 'date': '2012', 'amount': '1.45', 'type': 'one'}
]

今はsorted()を使用する必要があると思いますが、初心者として、私が見ている概念を理解するのに苦労しています。

私はこれを試しました:

from operator import itemgetter
all_amounts = itemgetter("amount")
stock.sort(key = all_amounts)

しかし、これにより、数値ではなく英数字でソートされたリストが作成されました。

誰かがこの一見単純なソートを達成する方法を教えてもらえますか?ありがとうございました!

4

3 に答える 3

3

並べ替え条件が複雑すぎますoperator.itemgetter。ラムダ関数を使用する必要があります。

stock.sort(key=lambda x: (int(x['date']), float(x['amount'])))

また

all_amounts = lambda x: (int(x['date']), float(x['amount']))
stock.sort(key=all_amounts)
于 2012-06-20T07:03:55.307 に答える
1

データを適切な形式に変換することから始めます。

stock = [
    { 'date': int(x['date']), 'amount': float(x['amount']), 'type': x['type']}
    for x in stock
]

stock.sort(key=all_amounts)正しい結果が返されるようになりました。

あなたはプログラミングの初心者のようですが、私がよろしければ一般的なアドバイスを以下に示します。

適切なデータ構造は成功の 90% です。コードをさらに記述して、壊れたデータを回避しようとしないでください。タスクに適した構造を作成し、できるだけ少ないコードを記述します。

于 2012-06-20T07:09:51.773 に答える
0

Python のソートが安定しているという事実を利用することもできます。

stock.sort(key=lambda x: int(x["amount"]))
stock.sort(key=lambda x: int(x["date"]))

同じキーを持つアイテムは、並べ替え時に相対的な位置を保持するため (それらが入れ替わることはありません)、複数回並べ替えることで複雑な並べ替えを構築できます。

于 2012-06-20T07:09:11.873 に答える