Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl到Python散列排序_Python_Perl_Sorting_Hash_Translate - Fatal编程技术网

Perl到Python散列排序

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没有定义,键需要是字符串,除非您在其他地方定义了它们 这可能更接近您想要的,但是,我无

我试图将一行Perl代码翻译成Python,但在Python的sorted()方法上遇到了障碍。Python不像Perl那样具有本机哈希支持,因此我使用autodict()复制Perl的哈希行为。下面是关于如何进行排序的代码片段

Perl:


上面的翻译不完全正确。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