Perl到Python散列排序
我试图将一行Perl代码翻译成Python,但在Python的sorted()方法上遇到了障碍。Python不像Perl那样具有本机哈希支持,因此我使用autodict()复制Perl的哈希行为。下面是关于如何进行排序的代码片段 Perl:Perl到Python散列排序,python,perl,sorting,hash,translate,Python,Perl,Sorting,Hash,Translate,我试图将一行Perl代码翻译成Python,但在Python的sorted()方法上遇到了障碍。Python不像Perl那样具有本机哈希支持,因此我使用autodict()复制Perl的哈希行为。下面是关于如何进行排序的代码片段 Perl: 上面的翻译不完全正确。Python版本基于散列中的第一个元素进行排序,即1、2、3。但是Perl版本是基于“index”进行排序的。首先,Python代码没有运行:hash没有定义,键需要是字符串,除非您在其他地方定义了它们 这可能更接近您想要的,但是,我无
上面的翻译不完全正确。Python版本基于散列中的第一个元素进行排序,即1、2、3。但是Perl版本是基于“index”进行排序的。首先,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
在函数中,我们可以定义一个
键
,该键指示我们希望它如何排序。在您的例子中,它是按键排序的,因为迭代器在散列上返回的结果是这样的,但是我们已经显式地声明了对dict键的排序,然后根据该dict中的值声明了排序键。如果您还没有看到它,这可能会帮助您:这似乎也与此相关:“Python不像Perl那样具有本机散列支持。”-你在说什么?dict是Python中的一种基本数据类型。你在找自生吗?您可以使用def tree():return collections.defaultdict(tree)
。感谢Lego Stormtroopr,您输入的lambda解决了这个问题。@superface如果答案有帮助,选择它作为可接受的答案可以帮助回答者找到未回答的问题,并显示未来的访问者,而不是有帮助的答案。
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