【问题标题】:Replace Value on dict comprehension based on condition根据条件替换字典理解的值
【发布时间】:2022-11-23 07:04:56
【问题描述】:
a = ('A','B','C')
b = (45.43453453, 'Bad Val', 76.45645657 )

我想创建一个字典,非常简单:

{ k:v for k,v in zip(a,b) }

我的问题是,现在我想应用 float(如果可能的话)或用 None 替换它

所以,我想应用一轮 2,因此我的输出应该是:

{'A': 45.43, 'B': None, 'C': 76.46}

【问题讨论】:

    标签: python dictionary zip rounding


    【解决方案1】:

    由于 round 引发 TypeError 每当某些东西没有实现 __round__ 时,这不可能直接使用字典理解,但您可以编写自己的函数以在其中使用。

    def safe_round(val, decimals):
      try:
        return round(val, decimals)
      except TypeError:
        return None
    
    a = ('A','B','C')
    b = (45.43453453, 'Bad Val', 76.45645657 )
    
    d = { k:safe_round(v, 2) for k,v in zip(a,b) }
    
    {'A': 45.43, 'B': None, 'C': 76.46}
    

    【讨论】:

      【解决方案2】:

      定义一个函数

      def try_round(n, d):
          try:
              return round(n, d)
          except TypeError:
              return None
      

      接着

      result = {k: try_round(v, 2) for k, v in zip(a, b)}
      

      【讨论】:

        猜你喜欢
        • 2015-09-26
        • 2015-10-30
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多