【问题标题】:pythonic way to add value to a dict key but if doesn't exist start it to 0 and then add the valuepythonic向dict键添加值但如果不存在则将其启动为0然后添加值的方法
【发布时间】:2017-04-17 14:59:55
【问题描述】:

我正在尝试简化对字典的操作。问题是,有时候密钥不存在,所以我必须先尝试KeyError,但我觉得我做得过火了。

示例:

x = {'a': 0, 'b': 0}

for key in ['a', 'b', 'c']:
    for i in range(0, 10):
        try:
            x[key] += i
        except KeyError:
            x[key] = 0
            x[key] += i

正如您在此处看到的,'c' 键不存在,所以我先尝试。如果可能的话,我正在寻找一种跳过尝试部分的方法。

谢谢!

【问题讨论】:

    标签: python dictionary try-catch keyerror


    【解决方案1】:

    使用默认字典

    from collections import defaultdict
    x = defaultdict(int)
    

    【讨论】:

      【解决方案2】:

      也许你可以使用字典的get方法

      试试这个:

      x[key] = x.get(key,0) +i
      

      完整代码:

      x = {'a': 0, 'b': 0}
      
      for key in ['a', 'b', 'c']:
          for i in range(0, 10):
              x[key] = x.get(key,0) +i
      

      【讨论】:

        【解决方案3】:

        试试这个

        x = {'a': 0, 'b': 0}
        
        for key in ['a', 'b', 'c']:
            for i in range(0, 10):
               x[key] = x.get(key, 0) + i
        

        【讨论】:

          【解决方案4】:

          听起来你真正想要的是Counter

          https://docs.python.org/2/library/collections.html#collections.Counter https://docs.python.org/3.6/library/collections.html#collections.Counter

          from collections import Counter
          c = Counter()
          
          for key in ['a', 'b', 'c']:
              for i in range(10):
                  c[key] += i
          

          【讨论】:

            【解决方案5】:

            您可以在添加 i 之前检查该元素是否在字典中。如果不是,则创建一个新元素并输入默认值0。那你就正常加i

            x = {'a': 0, 'b': 0}
            
            for key in ['a', 'b', 'c']:
                for i in range(0, 10):
                    if key not in x:
                        x[key] = 0
                    x[key] += i
            

            【讨论】:

              【解决方案6】:

              您可以使用列表推导和条件过滤字典中存在的键,然后对其进行迭代,如下所示:

              x = {'a': 0, 'b': 0}
              
              for key in [key for key in ['a', 'b', 'c'] if key in x.keys()]:
                  for i in range(0, 10):
                      x[key] += i
              
              print x
              

              输出

              {'a': 45, 'b': 45}
              

              【讨论】:

                猜你喜欢
                • 2020-09-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-01-09
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多