1

次のPerlコードをPythonで複製しようとしています。オブジェクトは、複数のハッシュ/辞書値でソートされたハッシュ/辞書キーの配列を取得することです。perl コードの例:

my $hash = {
 'item1'=> {'id'=>'a', 'pos'=>6},
 'item2'=> {'id'=>'a', 'pos'=>7},
 'item3'=> {'id'=>'b', 'pos'=>4},
 'item4'=> {'id'=>'a', 'pos'=>5},
 'item5'=> {'id'=>'b', 'pos'=>2},
};

my @keys = sort {
  $hash->{$a}->{id} cmp $hash->{$b}->{id} ||
  $hash->{$a}->{pos} <=> $hash->{$b}->{pos}
} keys %$hash;

print "@keys\n";

idこれは字句順、次に数値順でソートされるposため、期待される結果は次のようになります。

item4 item1 item2 item5 item3
4

2 に答える 2

1

使用sorted:

[k for k, v in sorted(hash.items(), key=lambda item: (item[1].id, item[1].pos))]
于 2012-12-03T11:45:49.190 に答える
0
from operator import attrgetter
sorted(hash, key=lambda k:attrgetter('id', 'pos')(hash[k]))
于 2012-12-03T12:11:17.990 に答える