从数字字典中获取最高值作为字符串[重复]

Posted

技术标签:

【中文标题】从数字字典中获取最高值作为字符串[重复]【英文标题】:Getting highest value from a dict of numbers as strings [duplicate] 【发布时间】:2020-09-03 18:03:27 【问题描述】:
production = 
        'item1': '500',
        'item2': '10000',
    

我正在尝试从该字典中获取最高值,即 10000。但是,我得到 500 作为 max(production.values()) 的返回值。

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

有人可以帮助我解决问题吗?谢谢!

【问题讨论】:

不是最佳复制目标。例如,可以使用以下问题更新重复列表:Get max number out of strings 【参考方案1】:

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')

【讨论】:

【参考方案2】:

不是您应该接受的答案,而是提供一些有关性能的背景:

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

答案是正确的,但不需要方括号(把它变成一个列表传递给max),因为max 也可以从生成器中获取它——离开@ 987654324@ 关闭。【参考方案4】:

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

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

【讨论】:

谢谢!但是,这些值是使用 OCR 插入到键中的。我认为没有办法直接使用 int 值来构造 dict。

以上是关于从数字字典中获取最高值作为字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

返回字符串中单词的字典长度[重复]

Python字典介绍

如何从字典中检查特定字符串的键[重复]

从字符串中获取所有数字的最佳方法[重复]

如何从返回字符数的字符串创建字典[重复]

想从字典格式的字符串中获取值