在从P移植的Python脚本中初始化命令值时遇到问题

2024-10-03 06:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将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}} 

为什么两个脚本的输出不匹配?你知道吗


Tags: 代码in脚本noneformyperllist
2条回答

在pythong版本中,每次分配新的基调时,都会清除场景中以前的“基调”值。我想你想要的是:

scenarioTenorValues[scenario, tenor] = 0

你的perl代码有点奇怪。print语句是否只是为了调试,以帮助您知道自己在哪里?为什么每次迭代都要打印数据结构?你可以用地图更简洁地编码。你知道吗

无论如何,对于dict的dict,dict的setdefault方法在这种情况下很方便:

#!/usr/bin/python
import pprint

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 "scen: %d" % scenario
    for tenor in tenor_list:
        print "tenor: %d" % tenor
        scenarioTenorValues.setdefault(scenario,{})[tenor] = 0
        pprint.pprint(scenarioTenorValues)

下面是使用Data::Dump的perl结果片段:

scen entered 2 
tenor entered 12
{
  1 => { 12 => 0, 24 => 0, 28 => 0, 36 => 0, 60 => 0, 84 => 0, 120 => 0, 180 => 0, 240 => 0, 300 => 0, 360 => 0 },
  2 => { 12 => 0 },
}

下面是使用pprint的python版本:

scen: 2
tenor: 12
{1: {12: 0,
     24: 0,
     36: 0,
     48: 0,
     60: 0,
     84: 0,
     120: 0,
     180: 0,
     240: 0,
     300: 0,
     360: 0},
 2: {12: 0}}

相关问题 更多 >