Python中如何输出字典里值大于0.8的键值对组合?
解决字典筛选条目并同时输出键值的问题
问题背景
我有一个名为results的字典,键是股票代码组成的元组,值是对应相关系数,结构如下:
{('AAPL', 'AAPL'): 1.0, ('AAPL', 'ABBV'): 0.2895481094217945, ('AAPL', 'AMZN'): 0.7985187751534586, ('AAPL', 'BAC'): 0.5923872592768968, ('AAPL', 'BRK-B'): 0.6076448647592143, ('AAPL', 'COST'): 0.6723253260025647, ('AAPL', 'CVX'): 0.2808264364499576, ('AAPL', 'GOOG'): 0.7932767338793895, ...... }
我需要筛选出值大于0.8的条目,当前代码只能输出符合条件的值:
i = 0 for i in results: if results[i] > 0.8: print(results[i])
输出结果:
1.0 0.8506229861474826 0.9999999999999998 1.0 0.8269262016223845 0.8266345202049308 .......
但我希望同时输出对应的股票代码组合,尝试过几种写法都报错:
- 写法1:
报错:print(results[ticker][I])IndexError: invalid index to scalar variable.
- 写法2:
报错:keys = results.keys() # 循环部分省略 print(results[keys[i]][I])TypeError: 'dict_keys' object is not subscriptable
解决方案
方法1:直接遍历键值对(最简洁)
用items()方法同时获取键和值,循环时直接解构使用,判断后输出:
for ticker_pair, value in results.items(): if value > 0.8: print(f"股票组合: {ticker_pair}, 对应值: {value}")
items()会返回字典中每个键值对的元组,循环时直接拆分出股票代码组合ticker_pair和对应值value,无需额外索引操作。
方法2:沿用原循环逻辑调整输出
如果想保留遍历键的写法,直接打印当前键和对应的值即可:
for ticker_pair in results: value = results[ticker_pair] if value > 0.8: print(f"{ticker_pair}: {value}")
这里ticker_pair就是每次循环拿到的股票代码元组,直接输出它和对应的value就行。
方法3:生成筛选后的新字典(适合后续复用)
如果需要保存筛选结果而非直接打印,用字典推导式生成新字典:
filtered_results = {pair: val for pair, val in results.items() if val > 0.8} # 打印新字典内容 for pair, val in filtered_results.items(): print(pair, val)
错误原因说明
- 第一种报错是因为
ticker和I是未定义变量,且即便定义,results[ticker]返回的是标量值(比如1.0),无法再用下标索引。 - 第二种报错是因为
dict_keys对象仅支持迭代,不支持下标访问,不能用keys[i]取元素,要么转成列表(list(results.keys())),要么直接遍历。
内容的提问来源于stack exchange,提问作者Niko
相关产品推荐
相关产品推荐

