从字符串的数字听写中获取最高值[重复]。

问题描述 投票:-1回答:4
production = {
        'item1': '500',
        'item2': '10000',
    }

我试图从该dict中获取最高值,即10000。然而,我得到的是500作为返回的 max(production.values()).

我相信之所以会这样,是因为它是从字符串中获取最高值,而不是int(取其码点的词法顺序)。

谁能帮我解决一下。谢谢

python dictionary max
4个回答
3
投票

max() 需要一个键属性,你可以用它来转换数据进行计算。

production = {
    'item1': '500',
    'item2': '10000',
}

# base max calculation on integer version of value
max(production.values(), key=int) # assuming all are integers
# '10000'

这将保留你在字典中的值 - 所以返回的值将保持为一个字符串。

如果你也想要键,这也很方便。

max(production.items(), key=lambda pair: int(pair[1]))
# ('item2', '10000')

5
投票

这不是你应该接受的答案,但可以提供一些性能方面的背景资料。

from random import randint
from timeit import timeit

# generating 1,000 dictionaries of random keys with random string values
dicts = [{k: str(randint(1, 10000)) for k in range(10000)} for _ in range(1000)]


def all_max1():
    # the answer provided by @MarkMeyer
    return [max(d.values(), key=int) for d in dicts]


def all_max2():
    # the answer provided by @Marceline
    return [max(int(x) for x in d.values()) for d in dicts]


print(timeit(all_max1, number=10))
print(timeit(all_max2, number=10))

@MarkMeyer提供的答案几乎是@Marceline提供的答案的两倍,尽管两者在技术上都是正确的。

结果是

7.4847795
11.341150599999999

@JHeron的建议是个好建议,如果你能避免在这个位置上出现字符串,使用整数会更有效率--但我假设你的数据是以字符串的形式出现的。

但是,如果你需要对这些值进行不止一次的操作(不仅仅是一个最大值),你可以考虑先转换原始数据,避免以后的多次转换。


1
投票

你可以将它们转换为整数,并将最大值取出来

max(int(x) for x in production.values())

1
投票

你得到这个输出是因为值是Strings.为了实现正确的max()比较,值必须是数字。

production = {
        'item1': 500,
        'item2': 10000,
    }
© www.soinside.com 2019 - 2024. All rights reserved.