Python 3 |排序、最大、最小字典错误

Python 3 |排序、最大、最小字典错误,python,python-3.x,Python,Python 3.x,我正在学习Python3,我正在尝试使用zip将字典转换为zip,这样我就能够在字典上使用排序、max和min等函数 顺便说一句,股票是字典。 所以我像这样测试了它,它成功了: print(min(zip(Stocks.values(),Stocks.keys()))) print(max(zip(Stocks.values(),Stocks.keys()))) print(sorted(zip(Stocks.values(),Stocks.keys()))) 然后我试着这样做: stock_

我正在学习Python3,我正在尝试使用zip将字典转换为zip,这样我就能够在字典上使用排序、max和min等函数

顺便说一句,股票是字典。 所以我像这样测试了它,它成功了:

print(min(zip(Stocks.values(),Stocks.keys())))
print(max(zip(Stocks.values(),Stocks.keys())))
print(sorted(zip(Stocks.values(),Stocks.keys())))
然后我试着这样做:

stock_zip = zip(Stocks.values(), Stocks.keys())
print(max(stock_zip))
print(min(stock_zip))
print(sorted(stock_zip))
这是一个安慰的结果,但我很困惑为什么会这样:

(520, 'GOOG')
Traceback (most recent call last):
  File "----------------------------------------------------------------", line 11, in <module>
    print(min(stock_zip))
ValueError: min() arg is an empty sequence
(520,'GOOG')
回溯(最近一次呼叫最后一次):
文件“----------------------------------------------------------------------”,第11行,在
打印(最小(库存拉链))
ValueError:min()参数是空序列

如果有人能解释为什么第二段代码不起作用,我将不胜感激:)

在python3.X
zip
中,返回一个迭代器,一旦你将它传递给一个函数,实际上你已经使用了它,因此当你将它传递给另一个函数时,你传递的是一个空迭代器

In [15]: a = zip(range(3), range(3))

In [16]: list(a)
Out[16]: [(0, 0), (1, 1), (2, 2)]

In [17]: list(a)
Out[17]: []

zip
返回迭代器

调用
max(stock\u-zip)
时,它会迭代并使用
stock\u-zip
迭代器。调用
min(stock\u-zip)
时,
stock\u-zip
已完全消耗,并且为空

除了保存对
zip(dict.keys(),dict.values())
输出的引用,您只需使用
dict.items()


你的解决方案中的问题是,在我的股票字典中,键是字符串,值是整数,我试图用数字而不是字母来组织字典order@Fargo
Stocks.items()
完全等同于
zip(Stocks.keys(),Stocks.values())
。您正在尝试对字典进行排序,但字典甚至没有顺序感。它们不是等价的,当我运行print(max(Stocks.items())时可以进行交易,它按键的算术顺序排序,而不是值的数字顺序。它们没有秩序感,但它们可以被秩序化,正如我在第一段代码中展示的那样,我理解为什么我的第二段代码现在不起作用,我只是说你的解决方案不是最好的best@Fargo这与
zip(…)
Stocks.items()
无关。两者都将返回完全相同的输出,这是一个元组列表,格式为
[(键1,值1),(键2,值2),…]
(按任意顺序)。@Fargo我明白了。我忽略了一个事实,您实际上使用了
zip(Stocks.values(),Stocks.keys())
而不是
zip(Stocks.keys(),Stocks.values())
print(max(Stocks.items()))
print(min(Stocks.items()))