gpt4 book ai didi

python - Perl 到 Python 哈希排序

转载 作者:行者123 更新时间:2023-12-01 05:36:37 25 4
gpt4 key购买 nike

我正在尝试将一行 Perl 代码转换为 Python,但在 Python 的sorted() 方法上遇到了障碍。 Python 没有像 Perl 那样的原生哈希支持,因此我使用 autodict() 来复制 Perl 的哈希行为。下面是有关如何完成排序的代码片段。

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 })

Python:

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 版本根据哈希中的第一个元素(一、二、三)进行排序。但 Perl 版本是根据“索引”进行排序

最佳答案

首先,您的 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()函数中,我们可以定义一个key来指示我们希望如何排序。在您的情况下,它是按键排序的,因为这就是哈希上的迭代器返回的结果,但是我们已经显式声明了对字典键的排序,然后根据该字典中的值声明了排序键。

关于python - Perl 到 Python 哈希排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com