我正在寻找在Perl中表达
Python代码片段的方法:
data = {"A": None,"B": "yes","C": None} key_list = [k for k in data if data[k]] # in this case the same as filter(lambda k: data[k],data) but let's ignore that
所以看一下这个方法,我只是想要这些值的值是None或undef.看另一种方式,我想要的是简洁的perl等同于list comprehension with conditional.
解决方法
我想你想要
grep
:
#!/usr/bin/env perl use strict; use warnings; my %data = ( A => undef,B => 'yes',C => undef ); my @keys = grep { defined $data{$_} } keys %data; print "Key: $_\n" for @keys;
我也认为我打的太慢了,我应该在发布答案之前重新加载页面.顺便说一下,值为0或undef可以是处理空值的好方法,但请确保记住您使用的是什么. Perl中的虚假值和未定义的值是不一样的.要澄清:undef在布尔测试中返回false,但是也是0.如果0是一个有效值,那么你要显式测试定义,而不是简单的真理. (我提到,因为詹姆斯去了0,我走了另一个方式,你可能会或可能不知道是否重要.)