Python 从作为字符串的数字中获取最大值

Python 从作为字符串的数字中获取最大值,python,dictionary,max,Python,Dictionary,Max,我正试图从这个dict中得到最高的值,也就是10000。然而,我得到了500作为max(production.values())的返回 我相信它是这样的,因为它是从字符串中获得最大值,而不是int(按照代码点的字典顺序) 有人能帮我解决吗。谢谢 您可以将它们转换为整数,并从中提取最大值 production = { 'item1': '500', 'item2': '10000', } 您得到这个输出是因为值是字符串。 要实现正确的max()比较,值必须

我正试图从这个dict中得到最高的值,也就是10000。然而,我得到了500作为
max(production.values())
的返回

我相信它是这样的,因为它是从字符串中获得最大值,而不是int(按照代码点的字典顺序)


有人能帮我解决吗。谢谢

您可以将它们转换为整数,并从中提取最大值

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

您得到这个输出是因为值是字符串。 要实现正确的max()比较,值必须是数字

max(int(x) for x in production.values())
获取可用于转换计算数据的键属性:

production = {
        'item1': 500,
        'item2': 10000,
    }
这将保留字典中的值,因此返回的值将保持为字符串

如果您还需要钥匙,它也很方便:

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')
@MarkMeyer提供的答案几乎是@Marceline提供的答案的两倍,尽管两者在技术上都是正确的

结果:

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))
@JHeron的建议是一个很好的建议,因为如果你能首先避免在那个位置使用字符串,那么使用整数会更有效——但我假设你的数据是以字符串的形式出现的


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

答案是正确的,但不需要方括号(将其转换为“代码”>“max < /COD>”),因为
max
也可以从发电机上取下它-只需关闭
[]
即可。谢谢!但是,使用OCR将值插入到关键帧中。我认为没有一种方法可以直接使用int值来构造dict,这不是最好的复制目标。例如,可以使用以下问题更新副本列表:
7.4847795
11.341150599999999