【问题标题】:Printing dictionary keys based on multiple value conditions [duplicate]基于多个值条件打印字典键[重复]
【发布时间】:2019-06-20 02:22:29
【问题描述】:

我有一个字典,每个键都有两个值,例如:

my_dict = {'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)}

如果两个值都满足特定要求,我想做的是返回字典键。因此,假设我希望每个键的第一个值超过 30,第二个值低于 0.6。这两个条件都需要满足才能返回密钥。所以在这种情况下,我希望股票 A 和股票 D 被退回。我很高兴单独打印键,但如果有办法用键和两个值附加一个新字典,那就太好了。由于我对字典的了解非常不完整,我的价值观没有标题,它们只是价值观,只是为了让事情变得更加困难。

我设想使用的代码类似于:

if value in my_dict > 30 and second value in my_dict < 0.6:
   new_dict.append(key: value, second value)

我对这种尝试完全不准确感到很尴尬,但我只是不知道如何解决这个问题。

【问题讨论】:

    标签: python pandas dictionary


    【解决方案1】:

    试试这个代码

    my_dict = {'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)}
    
    new={}
    for (stock,values) in my_dict.items():
         first=values[0]
         second=values[1]
         if (first>30 and second<0.6):
              new[name]=(first,second)
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      您可以使用字典推导创建一个新的字典。

      my_dict = {'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)}
      
      new_dict = {k:v for k,v in my_dict.items() if v[0]>30 and v[1] <0.6}
      print (new_dict)
      

      结果:

      {'Stock A': (100, 0.5), 'Stock D': (45, 0.3)}
      

      【讨论】:

        【解决方案3】:
        my_dict = {'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)}
        
        result={key:value for key,value in my_dict.items() if value[0]>30 and value[1]<.6}
        
        print(result)
        

        输出:

        {'Stock A': (100, 0.5), 'Stock D': (45, 0.3)}
        

        【讨论】:

          【解决方案4】:

          您需要使用.items() 对dict 进行迭代,然后您可以将元组解包为2 个变量(firstValsecondVal):

          my_dict = {'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)}
          new_dict = {}
          
          for key, v in my_dict.items():
              firstVal, secondVal = v
          
              if firstVal > 30 and secondVal < 0.6:
                  new_dict[key] = v
          
          print new_dict
          

          打印:

          {'Stock D': (45, 0.3), 'Stock A': (100, 0.5)}
          

          【讨论】:

            【解决方案5】:

            list comprehensions 创建这个dictionary -

            my_dict = {'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)}
            
            my_dict_out = dict([ (k,r) for k,r in my_dict.items() if r[0]>30 and r[1] <0.6])
            
            print(my_dict_out)
                {'Stock A': (100, 0.5), 'Stock D': (45, 0.3)}
            

            注意:这个答案被标记了很多次negative,因为我使用.iteritems()而不是.items(),它不适用于Python 3.+。因此,如果您使用的是Python 2.+,则使用.iteritems(),否则使用.items()

            【讨论】:

              【解决方案6】:
              my_dict = {'Stock_A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)}
              new_dict = {} # Dictionary in which the TRUE conditions are stores
              
              
              # Function which makes the comparison
              def comp(Val1,Val2):
                  Values = [30,0.6]
                  if Val1 > Values[0] and Val2 < Values[1]:
                      return True,(Val1,Val2)
                  else:
                      return False,None
              
              # Creates the new dictionary   
              for key in my_dict:
                  Res = comp(my_dict[key][0],my_dict[key][1])
                  if Res[0]:
                      new_dict[key] = Res[1]
              
              
              print(new_dict)
              
              
              
              
              
              
              
              {'Stock_A': (100, 0.5), 'Stock D': (45, 0.3)}
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-03-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-11-04
                • 2015-06-29
                • 2016-10-21
                相关资源
                最近更新 更多