如何获得特定的'在字典中具有最大值的键?

时间:2017-06-18 17:15:59

标签: python dictionary

我的命令是:

rec_Dict = {'000000000500test.0010': -103,
            '000000000500test.0012': -104,
            '000000000501test.0015': -105,
            '000000000501test.0017': -106}

我知道如何找到最大值:

>>print 'max:' + str(max(recB_Dict.iteritems(), key=operator.itemgetter(1)))
max:(u'000000000500test.0010', -103)`

但我想找到以'000000000501test'开头的密钥,但不包括'000000000501test.0015'或任何以'000000000500test'开头的密钥。

它应该打印如下:

max:(u'000000000501test.0015', -105)`

如何使用关键字来获取?

3 个答案:

答案 0 :(得分:1)

我无法理解您想要过滤密钥的条件,但您可以使用以下脚本(只需修复条件)

advance() {
     this.router.navigate([`../${this.curStep + 1}`], { relativeTo: this.route });
}

答案 1 :(得分:1)

分离责任以获得最终结果,您可以根据您想要匹配的内容找到最大值。然后使用该最大值,只输出该值。当然,有些人会认为它不是最优化的,或者不是最功能的方式。但是,就个人而言,它工作正常,并以足够好的性能达到效果。此外,使其更易读,更容易测试。

通过提取键并找到max:

,根据所需字符串的部分获取最大值
max_key_substr = max(i.split('.')[0] for i in rec_Dict)

使用max_key_substr迭代并输出键/值对:

for key, value in rec_Dict.items():
    if max_key_substr in key:
        print(key, value)

输出将是:

000000000501test.0015 -105
000000000501test.0017 -106

答案 2 :(得分:1)

你说它应该打印得像是没有意义的,因为根据你所说的其他事情,键'000000000501test.0015'应该被排除在外。

忽略这一点,您可以使用generator expression来筛选出您不想处理的项目:

from operator import itemgetter

rec_Dict = {'000000000500test.0010': -103,
            '000000000500test.0012': -104,
            '000000000501test.0015': -105,
            '000000000501test.0017': -106}

def get_max(items):
    def sift(record):
        key, value = record
        return key.startswith('000000000501') and not key.endswith('.0015')

    max_record = max((item for item in items if sift(item)), key=itemgetter(1))
    return max_record

print(get_max(rec_Dict.iteritems()))  # -> ('000000000501test.0017', -106)