2011-01-12 5 views
1

こんにちは。私は日付でソートされたタプルのセクションをソートして返したいと思います。Python:タプルを日付順にソートする。 Noob here

最初のレコードから4番目のレコード(タプル[:3])をソートして印刷したいだけです。

tuple = [('Dec 1, 2010', '7.41', '7.60', '7.37'), 
     ('Dec 4, 2010', '7.41', '7.60', '7.37'), 
     ('Dec 2, 2010', '7.41', '7.60', '7.37'), 
     ('Dec 20, 2010', '7.41', '7.60', '7.37'), 
     ('Dec 16, 2010', '7.41', '7.60', '7.37'), 
     ('Jan 2, 2011', '7.41', '7.60', '7.37')] 

私が試した:

import operator 
sorted(tuple[:3], key=operator.itemgetter('date'), reverse=True) 

をしかし、それはエラー「TypeError例外が返されました:。?タプルインデックスはstrをない整数でなければなりません

+8

リスト 'tuple'を呼び出さないでください。これはコンテナである組み込みの 'tuple'をシャドウします。 – user225312

答えて

7

なぜあなたはdateで取得しているではありませんあなたが探しているタプルの最初の要素?

sorted(records[:3], key=operator.itemgetter(0), reverse=True) 

ところで、tr比較する前に文字列を実際の日付に変換します。多分:

from datetime import datetime 
def get_date(record): 
    return datetime.strptime(record[0], "%b %d, %Y") 
sorted(records[:3], key=get_date, reverse=True) 

私はrecordsからtupleと改名しました。他の人が指摘しているように、tupleを使用すると、型コンストラクタをシャドーイングしています。同様に重要です:タプルではないリストであり、変数は複数(コレクションを格納する)でなければならず、意味のある名前を持つ必要があります。

0

問題は、キー'date'を要求していることです。これは、データ要素が'date'の辞書である場合にのみ機能します。

toklandが指摘しているように、それはあなたが求めているタプルの要素なので、0を使う必要があります。最初のものです。

また、実際にはtupleに「タプル」という名前を付けないでください。これは型自体の名前であり、別の値で置き換えたくないということです。

+0

彼は実際にはタプルのリストを持っています。 –

+0

そうですね、私もそのことに気付きました。 – JAL

1

まず、[]はタプルではなく、リスト(this post on daniweb.com参照)と呼ばれます。

第2に、dictionaryの場合、keyvalueにリンクします。リストは1次元なので、インデクスを要求するだけで値を得ることができます。

>> dic = {'date' : 'value', 'bla' : 'foo'} 
>> dic['date'] 
value 
>> dic['bla'] 
foo 

>> list = ['a', 'b', 'c'] 
>> list[0] 
a 
>> list[2] 
c 

ソートする前に、日付をdatetime.datetime個のオブジェクトに変換することをお勧めします。文字列であるため(例では)、アルファベット順にでなく、日付でにソートされます。

0

テキスト'date'は魔法ではありません。 operator.itemgetterは、それが何を参照しているものであれ、インデックスとして渡されたものを使用します。 'date'の意味を理解しようとしません。

'date'は文字列です。 dictには文字列であるキーがあります。あなたのリストにtupleがあります。 tupleが0

から始まる、整数であり、鍵を持っているまた、ソート用keyを使用すると、ちょうどは、キーの値を解釈し、各項目からキーを得ていると、キー値に従ってアイテムを並べ替える」と言います通常 "となります。tupleの最初の項目は、魔法のようにDateオブジェクトのようなものではありません。それらは文字列であり、文字列のように比較されます。

@toklandは、 "これらのタプルのうちの1つを指定して、開始要素を取得し、datetimeモジュールを使用して日付に変換する"という操作のコードを設定する方法を示します。次に、この操作をキーとしてソートを呼び出します。

関連する問題