ank*_*nkh -1 python dictionary max
production = {
'item1': '500',
'item2': '10000',
}
Run Code Online (Sandbox Code Playgroud)
我试图从该 dict 中获得最高值,即 10000。但是,我得到 500 作为max(production.values()).
我相信它是这样的,因为它从 string 中获得最高值,而不是 int (采用其代码点的字典顺序)。
有人可以帮我解决一个问题。谢谢!
max()采用一个关键属性,您可以使用它来转换计算数据:
production = {\n \'item1\': \'500\',\n \'item2\': \'10000\',\n}\n\n# base max calculation on integer version of value\nmax(production.values(), key=int) # assuming all are integers\n# \'10000\'\nRun Code Online (Sandbox Code Playgroud)\n\n这将保留字典 \xe2\x80\x94 中的值,因此返回的值将保留为字符串。
\n\n如果您也想要密钥,这也很方便:
\n\nmax(production.items(), key=lambda pair: int(pair[1]))\n# (\'item2\', \'10000\')\nRun Code Online (Sandbox Code Playgroud)\n
不是您应该接受的答案,而是提供一些有关性能的背景:
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))
Run Code Online (Sandbox Code Playgroud)
@MarkMeyer 提供的答案几乎是 @Marceline 提供的答案的两倍,尽管两者在技术上都是正确的。
结果:
7.4847795
11.341150599999999
Run Code Online (Sandbox Code Playgroud)
@JHeron 的建议是很好的建议,因为如果您可以首先避免在该位置使用字符串,则使用整数会更有效 - 但我假设您的数据以字符串的形式出现。
但是,如果您需要对这些值进行多次操作(不仅仅是单个最大值),您可以考虑先转换原始数据,然后避免多次转换。
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |