对于哈希来说,Perl的'if exists'的Python等价物是什么?

时间:2015-07-22 20:13:58

标签: python python-2.7

我正在编写一个工作脚本,需要能够创建一个数组哈希,检查哈希(或字典)中是否存在密钥,如果确实存在,我将汇总一些值从新行到现有哈希值。这是我在Perl中的代码,Python中的翻译是什么?

if (exists($rollUpHash{$hashKey}))
        {
          say("Same key found, summing up!")
          $rollUpHash{$hashKey}[14] += $lineFields[14];
          $rollUpHash{$hashKey}[15] += $lineFields[15];
          $rollUpHash{$hashKey}[16] += $lineFields[16];
          $rollUpHash{$hashKey}[17] += $lineFields[17];
          $rollUpHash{$hashKey}[24] += $lineFields[24];
          push @{$rollUpHash{$hashKey}}, $sumDeduct_NonDeduct_ytd;
          # print %rollUpHash;
        }
      else
        {
          $rollUpHash{$hashKey} = \@lineFields;
        }

2 个答案:

答案 0 :(得分:6)

如果您只是检查密钥是否存在,则可以执行if "key" in your_dictionary

编辑:

要处理问题的非预期第二部分,关于将新值添加到数组中,您可以执行类似这样的操作

# -1 will give you the last item in the list every time
for key, value in nums.iteritems():
    nums[key].append(value[-1]+value[-1])

答案 1 :(得分:3)

你也可以使用它

rollUpHash.get(key, None)

如果该键存在,则该函数返回该键的值,否则该函数将返回您指定的任何默认值(第二个参数)

if rollUpHash.has_key(hashkey):
    print "Same key found, summing up!"
    rollUpHash[hashkey][14] += lineFields[14]
    ...
    ...
    rollUpHash[hashkey].append(sumDeduct_NonDeduct_ytd)
else:
    rollUpHash[hashkey] = lineFields