【问题标题】:How to compare a integer in tuple in a list, to another integer in another tuple in another list in one dictionary?如何将列表中元组中的整数与一个字典中另一个列表中另一个元组中的另一个整数进行比较?
【发布时间】:2016-11-28 07:41:12
【问题描述】:

例如,我有:

>>>a = {'dog': [('cute', 10, 20)], 'cat': [('nice', 12, 11)], 'fish':[('hate', 1, 3)]}

预计返回 'dog',因为索引 1 和 2 处的整数之和为 30,大于 cat 和 fish 的整数之和。

如果我不使用导入,有没有简单的方法可以做到这一点?

【问题讨论】:

    标签: python list dictionary tuples


    【解决方案1】:

    只需使用带有自定义键的max

    >>> a = {'dog': [('cute', 10, 20)], 'cat': [('nice', 12, 11)], 'fish':[('hate', 1, 3)]}
    >>> max(a, key=lambda x: sum(a[x][0][1:]))
    'dog'
    

    每个x 都是字典中的一个键,因此我们在此键x 的值a 中获取元素1sum 及以后的值。

    【讨论】:

    • print timeit.timeit( """a = {'dog': [('cute', 10, 20)], 'cat': [('nice', 12, 11)], 'fish':[('hate', 1, 3)]} max_key = a.keys()[0] max_sum=0 for key in a.keys(): cur_sum = sum(a[key][0][1:]) if cur_sum>max_sum: max_sum = cur_sum max_key = key """,number=10000 ) 平均给了0.0300233601695print timeit.timeit( """a = {'dog': [('cute', 10, 20)], 'cat': [('nice', 12, 11)], 'fish':[('hate', 1, 3)]} max(a, key=lambda x: sum(a[x][0][1:]))""",number=10000 ) 给了0.0265969282814,这使得这变得更好和pythonic :)
    • 即使不使用 lambda,还有其他方法吗?
    【解决方案2】:

    print max(a.items(), key=lambda (key, val): sum(val[0][1:]))[0] # dog

    【讨论】:

      【解决方案3】:

      Tigerhawk 做到了,如果有人想要传统的非 Python 解决方案,我的解决方案 -

      a = {'dog': [('cute', 10, 20)], 'cat': [('nice', 12, 11)], 'fish':[('hate', 1, 3)]}
      
      max_key = a.keys()[0]
      max_sum=0
      for key in a.keys():
          cur_sum = sum(a[key][0][1:])
          if cur_sum>max_sum:
              max_sum = cur_sum
              max_key = key
      
      print max_key
      

      【讨论】:

      • max_key = a.keys()[0] 是否支持索引?
      • @CrystalTran max_key 用字典中的第一个键初始化。做 a.keys() 输出一个键列表,所以我可以像列表一样访问它
      猜你喜欢
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多