python相当于perl按哈希值排序

时间:2012-12-03 11:37:23

标签: python sorting

我想在python中复制以下perl代码。目标是获得按多个散列/字典值排序的散列/字典键数组。示例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

2 个答案:

答案 0 :(得分:1)

使用sorted

[k for k, v in sorted(hash.items(), key=lambda item: (item[1].id, item[1].pos))]

答案 1 :(得分:0)

from operator import attrgetter
sorted(hash, key=lambda k:attrgetter('id', 'pos')(hash[k]))