【问题标题】:My Ordered Dict is not working as I expected我的 Ordered Dict 没有按预期工作
【发布时间】:2021-01-01 05:06:06
【问题描述】:

所以基本上我有这个代码:

from collections import OrderedDict as OD
person = OD({})

for num in range(10):
    person[num] = float(input())

tall = max(person.values())
short = min(person.values())

key_tall = max(person.keys())
key_short = min(person.keys())

print(f'The shortest person is the person number {key_short} who is {short}meters tall')
print(f'The tallest person is the person number {key_tall} who is {tall}meters tall')

理论上,当我在字典中放 10 个人时,第一个数字是 1,一直到 9,最后一个数字是 0,输出应该是:

The shortest person is the person number 9 who is 0.0m meters tall
The tallest person is the person number 8 who is 9.0m meters tall


但实际上它会打印:

The shortest person is the person number 0 who is 0.0m meters tall
The tallest person is the person number 9 who is 9.0m meters tall

由于某种原因,当我的字典的值从 1 一直到 10 时,它工作正常。

关于为什么会发生这种情况以及如何解决它的任何想法?

【问题讨论】:

  • max(person.keys()) 会给你最大键,而不是最大值的人的键。与min 相同。请注意,您使用 OrderedDict 是否有任何特殊原因?

标签: python dictionary collections ordereddict


【解决方案1】:
key_tall = max(person.keys())
key_short = min(person.keys())

您的 keys 是整数 0..9,因此对于这两个值,您应该会得到 90,因为您要求的最小/最大键没有关于价值观。

似乎在寻找具有最高/最低价值的人的钥匙,但这不是该代码将为您提供的。

如果您要查找具有最大值的项目的索引,则可以执行以下操作:

indexes_tall = [idx for idx in range(len(person)) if person[idx] == max(person.keys())]

这将为您提供与最高值匹配的索引列表,然后您可以根据需要对其进行处理。举个例子:

from collections import OrderedDict as OD
person = OD({})

for num in range(10):
    person[num] = float((num + 1) % 10) # effectively your input

tall = max(person.values())
short = min(person.values())

keys_tall = [str(idx + 1) for idx in range(len(person)) if person[idx] == max(person.keys())]
keys_short = [str(idx + 1) for idx in range(len(person)) if person[idx] == min(person.keys())]

print(f'The shortest height of {short}m is held by: {" ".join(keys_short)}')
print(f'The tallest height of {tall}m is held by: {" ".join(keys_tall)}')

会给你:

The shortest height of 0.0m is held by: 10
The tallest height of 9.0m is held by: 9

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 2021-02-28
    相关资源
    最近更新 更多