将库存与值相乘

时间:2015-12-28 17:36:55

标签: python-2.7

我想知道是否有更简单的方法来将我所拥有的库存乘以其分配的值?我出来了下面的代码,它似乎有用,但看起来很冗长。

List<Education> eduList = aDoc.getAppEdu(aDoc.AppID);
if (refList.Count < 0)
{
      appQue.AppendLine("Applicant did not supply Educational Background information." + Environment.NewLine).Bold();
}
else
{
     foreach (Education ed in eduList)
     {
          Novacode.Table tblEdu = doc.AddTable(6, 1);                                      
          tblEdu.AutoFit = AutoFit.Contents;   
          tblEdu.Rows[0].Cells[0].Paragraphs.First().Append("Education").Bold().FontSize(13);  
            tblEdu.Rows[1].Cells[0].Paragraphs.First().Append("* School Name: ");                          tblEdu.Rows[1].Cells[0].Paragraphs.First().Append(ed.SchoolName).Bold(); ;
            tblEdu.Rows[2].Cells[0].Paragraphs.First().Append("* City: ");
            tblEdu.Rows[2].Cells[0].Paragraphs.First().Append(ed.City).Bold();
            tblEdu.Rows[2].Cells[0].Paragraphs.First().Append("* State: ");
            tblEdu.Rows[2].Cells[0].Paragraphs.First().Append(ed.EduState).Bold();
            tblEdu.Rows[2].Cells[0].Paragraphs.First().Append("* Zip: ");
            tblEdu.Rows[2].Cells[0].Paragraphs.First().Append(ed.Zip).Bold();
            tblEdu.Rows[3].Cells[0].Paragraphs.First().Append("* From: ");
            tblEdu.Rows[3].Cells[0].Paragraphs.First().Append(ed.SStartScho).Bold();
            tblEdu.Rows[3].Cells[0].Paragraphs.First().Append("* To: ");
            tblEdu.Rows[3].Cells[0].Paragraphs.First().Append(ed.SEndScho).Bold();
            tblEdu.Rows[4].Cells[0].Paragraphs.First().Append("* Did you graduate? ");
            string grad = "No";
            if (ed.Graduate == true)
            {
                grad = "Yes";
            }                                                     
            tblEdu.Rows[4].Cells[0].Paragraphs.First().Append(grad).Bold();
            tblEdu.Rows[5].Cells[0].Paragraphs.First().Append("* Diploma/Degree: ");               tblEdu.Rows[5].Cells[0].Paragraphs.First().Append(ed.Degree).Bold();                                                            
            doc.InsertTable(tblEdu);
            appQue = doc.InsertParagraph();
     }
} 

3 个答案:

答案 0 :(得分:2)

如果要对字典score中的所有值求和,可以使用

执行此操作
sum(score.values())

sum(score.itervalues())

附加说明:在您的示例中,inventory等于score.keys()(但顺序不一定相同)。

修改

从Python 3.X开始inventory等同于list(score.keys())

感谢@dwanderson提示。

答案 1 :(得分:1)

>>>> sum(score.values())

Python词典有很多方便的方法/访问器,特别适用于这些类型的东西。首先,如果您想要字典中的每个项目(键,值,键值对),您可能不需要使用.get(...)语法。

如果你只想要钥匙,你可以这样做:

for key in score:

(注意:for key in score.keys():也可以,但是在Python3中,它是不必要的,而在Python2中,它可以提供性能影响; for key in score.iterkeys()无需创建临时列表,但可能没有理由仅仅通过'得分'来呼叫score.iterkeys(),至少不是我能想到的。)

如果你只想要这些值,那么Python提供了一个内置的,有效的方法 - 不需要构建一个全新的值列表,只需要sum它们然后扔掉列表。这进入了generator s的主题,但这似乎有点偏离。我只想说,

for value in score.itervalues():

可以让你查看并检查每个值。你不知道哪个键与哪个值有关,但在你的特定情况下,你不关心键,只关心值,所以没关系。

如果你想同时查看密钥和值,那么你需要的只是

for key, value in score.iteritems():

现在,在您的特定情况下,您只需要每个值一次,Python的sum足够聪明,可以弄清楚如何从.values()生成器中提取它,因此不需要< em> explicit for-loop。你可以写sum(score.itervalues())并得到你需要的东西。

这看起来并不像是一个特别关注的问题,但只是要注意:即使你没有明确的for循环,它仍然在“引擎盖下”执行一个,所以列表越长,时间越长它将花费sum。但是,这对于这样一个直截了当的小例子来说无关紧要;如果您正在使用具有数百万个值的列表的总和(或者如果您一遍又一遍地调用sum(score.itervalues())),那么请记住这一点。

答案 2 :(得分:0)

如果inventory的条目少于score,则会有点短:

>>> sum(score[key] for key in inventory)
27