【问题标题】:Perl to Python hash sortPerl 到 Python 哈希排序
【发布时间】:2013-09-21 07:32:19
【问题描述】:

我正在尝试将一行 Perl 代码转换为 Python,但遇到了 Python 的 sorted() 方法的障碍。 Python 没有像 Perl 那样的本地哈希支持,所以我使用 autodict() 来复制 Perl 的哈希行为。下面是关于如何进行排序的代码 sn-p。

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 版本是基于“索引”进行排序

【问题讨论】:

  • 如果您还没有看到它,这可能会对您有所帮助:wiki.python.org/moin/HowTo/Sorting
  • “Python 没有像 Perl 那样的原生哈希支持”——你在说什么? dicts 是 Python 中的基本数据类型。你在寻找自动复活吗?您可以通过def tree(): return collections.defaultdict(tree) 获得。

标签: python perl sorting hash translate


【解决方案1】:

首先,您的 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 来指示我们希望它如何排序。在您的情况下,它是按键排序的,因为这就是哈希上的迭代器返回的内容,但是我们已明确声明对字典的键进行排序,然后根据该字典中的值声明排序键。

【讨论】:

  • 感谢 Lego Stormtroopr,您放入的 lambda 解决了问题。
  • @superface 如果某个答案有帮助,将其选为已接受的答案有助于回答者找到未回答的问题,并向未来的访问者展示某个答案的帮助。
猜你喜欢
  • 2010-10-20
  • 2018-12-17
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 2012-01-08
  • 2012-11-27
相关资源
最近更新 更多