1

Perl コードの行を Python に変換しようとしていますが、Python の sorted() メソッドで障害が発生しました。Python には Perl のようなネイティブ ハッシュ サポートがないため、autodict() を使用して Perl のハッシュ動作を再現しました。以下は、並べ替えがどのように行われたかのコード スニペットです。

パール:

hash{one}{"index"} = 1
hash{one}{"value"} = "uno"
hash{two}{"index"} = 2
hash{two}{"value"} = "dos"
hash{three}{"index"} = 3
hash{three}{"value"} = "tres"
foreach my $ctg (sort hash{$a}{"index"} <=> hash{$b}{"index"}} keys %{ hash })

パイソン:

hash[one]["index"] = 1
hash[one]["value"] = "uno"
hash[two]["index"] = 2
hash[two]["value"] = "dos"
hash[three]["index"] = 3
hash[three]["value"] = "tres"
for ctg in sorted(hash):

上記の翻訳は正確ではありませんでした。Python バージョンは、ハッシュの最初の要素である 1、2、3 に基づいてソートされます。しかし、Perl バージョンは「インデックス」に基づいてソートを行っています。

4

1 に答える 1

2

まず第一に、あなたの Python コードは実行されません:hashは定義されておらず、他の場所で定義していない限り、キーは文字列である必要があります。

これはおそらくあなたが望むものに近いですが、最後の行の Perl が理解できません。

hash = {}
hash['one']  = {"index": 1, "value": "uno"}
hash['two']  = {"index": 2, "value": "dos"}
hash['three']= {"index": 3, "value": "tres"}
for ctg in sorted(hash.keys(),key=lambda x: hash[x]['index']):
   print hash[ctg]['index'],hash[ctg]['value']

このコードは次を返します。

1 uno
2 dos
3 tres

関数では、ソート方法を示すsorted()a を定義できます。keyあなたの場合、ハッシュのイテレータが返すものとしてキーでソートされていましたが、辞書のキーのソートと、その辞書の値に基づくソートキーを明示的に宣言しました。

于 2013-09-17T03:17:35.280 に答える