0

並べ替えたい大きな配列があります。配列では、配列の最初の項目はカテゴリであり、2番目の項目は並べ替える必要のある項目です。例えば:

joe = [['miles', 330], ['points', 5000], ['miles', 400], ['points', 4000], ['trophy', 'explorer'], ['points', 4100]]

リスト内のリストにアクセスするさまざまな方法を試してきましたが、これを正確に行う方法がわかりません。どうすれば情報にアクセスできますか?

私はバリエーションを試しました:

mylist = []
for item in joe:
    category = mylist(item[0])
    print category

その後、これらの値を異なる配列に割り当てます(3つの別々の配列があり、そのデータを基本的に並べ替える必要があります)。しかし、今の私の主な関心事は、データを割り当てるための最良の方法は何かということです。

4

3 に答える 3

4

私はあなたが次のようなものが欲しいと思います:

new_joe = sorted( joe,key = lambda x: x[1] )

これは、もう少し効率的なものと同じです。

from operator import itemgetter
new_joe = sorted( joe, key = itemgetter(1) )

joeまたは、その場で並べ替えることができます。

joe.sort(key=lambda x: x[1])

しかし、すべての'miles'リストをまとめて、その後昇順で並べ替える場合はどうでしょうか。

joe.sort()

トリックを行う必要があります...(そして今、うまくいけば、私はあなたが必要とするものをヒットするのに十分なベースをカバーしました)。


ああ、今私はあなたが欲しいものを見る。このために、あなたはたくさんのオプションを持っています。私のお気に入りはcollections.defaultdict

from collections import defaultdict
d = defaultdict(list)
for k,v in joe:
   d[k].append(v)

for k,v in d.items():
   print(k,v)

ただし、別のオプションは、並べ替えjoe(例joe.sort())とを使用することitertools.groupbyです。

于 2012-09-25T01:55:37.043 に答える
1

データをカテゴリごとにリストに分けるには、辞書が役立ちます。単一の文字列を数値のリストに関連付けることができます。したがって、すべてのカテゴリを空のリストなどに関連付けるdictから始めて、my_dict = {'miles': [], 'points': []}リストを繰り返し処理します。各アイテムで、文字列に関連付けられたリストに番号を追加します。

for item in joe:
    category = item[0]
    my_dict[category].append(item[1])

dictのsetdefaultメソッドを使用すると、dictに入れるすべてのカテゴリをハードコーディング(または事前計算)する必要がなくなります。

my_dict = {}
for item in joe:
   category = item[0]
   my_dict.setdefault(category, []).append(item[1])

次に、これらの各リストを並べ替えるには、dictの値を繰り返し処理し、リストのsortメソッドを使用してそれらを所定の位置に並べ替えます。

for category in my_dict:
   my_dict[category].sort()

これによりmy_dict、次のようになります。

{'trophy': ['explorer'], 'miles': [330, 400], 'points': [4000, 4100, 5000]}
于 2012-09-25T01:59:57.180 に答える
1

このループを実行する場合:

for item in joe:

どのようにitem見えますか?推測する必要はありません、あなたはそれを印刷することができます:

for item in joe:
    print item

明らかに、itemメインリスト内の各サブリストはです。最初は['miles', 330]です。

さて、どうやって入手し'miles'ますか? item[0]、 右? item[1]になります330

これで、カテゴリに基づいて新しいリストを簡単に作成できます。これらを辞書に保存します。

joedict = {}
for item in joe:
    joedict.setdefault(item[0], []).append(item[1])

joedict['miles']これで、すべてのマイルなどのリストが表示されます。

これらのそれぞれを並べ替えるのは簡単です。

for value in joedict.itervalues():
    value.sort()

これは役に立ちますか?

于 2012-09-25T02:01:13.053 に答える