我正在尝试将Perl脚本转换为Python。以下是Perl代码:
my %ScenarioTenorValues;
my @tenor_list =(12,24,36,48,60,84,120,180,240,300,360);
my $scen;
my $tenor;
for($scen = 1; $scen < 20; $scen += 1)
{
print "scen entered $scen \n";
foreach $tenor (@tenor_list)
{
print "tenor entered $tenor \n";
$ScenarioTenorValues{$scen}{$tenor} = 0;
print Dumper(\%ScenarioTenorValues);
}
}
输出如下所示:
tenor: 240 $VAR1 = '11'; $VAR2 = { '240' => 0, '84' => 0, '120' => 0, '36' => 0, '12' => 0, '48' => 0, '360' => 0, '60' => 0, '180' => 0, '24' => 0, '300' => 0 };
我尝试将其转换为Python,如下所示:
scenarioTenorValues = {}
tenor_list =[12,24,36,48,60,84,120,180,240,300,360]
scenario = None
tenor = None
for scenario in range(1,20):
print "scenario: ",scenario
for tenor in tenor_list:
print "tenor entered: ",tenor, "\n"
scenarioTenorValues[scenario] = { tenor : 0 }
print (scenarioTenorValues), "\n"
但是,Python脚本的输出与Perl脚本的输出不匹配:
{1: {360: 0}, 2: {360: 0}, 3: {360: 0}, 4: {360: 0}, 5: {360: 0}, 6: {360: 0}, 7: {360: 0}, 8: {360: 0}, 9: {360: 0}, 10: {360: 0}, 11: {360: 0}, 12: {360: 0}, 13: {360: 0}, 14: {360: 0}, 15: {360: 0}, 16: {360: 0}, 17: {360: 0}, 18: {360: 0}, 19: {36: 0}}
为什么两个脚本的输出不匹配?你知道吗
在pythong版本中,每次分配新的基调时,都会清除场景中以前的“基调”值。我想你想要的是:
你的perl代码有点奇怪。print语句是否只是为了调试,以帮助您知道自己在哪里?为什么每次迭代都要打印数据结构?你可以用地图更简洁地编码。你知道吗
无论如何,对于dict的dict,dict的setdefault方法在这种情况下很方便:
下面是使用
Data::Dump
的perl结果片段:下面是使用
pprint
的python版本:相关问题 更多 >
编程相关推荐