Python中max()/min()处理字典返回键而非值的问题排查
字典调用max()/min()返回键而非值的问题解析
问题场景
使用len()创建了存储字符串长度的字典,格式示例:{0: 101, 1: 101, 2: 101, 3: 100 ...}。调用max()和min()获取最值时,返回的是字典的最大/最小键(如0和n-1),结果不符合预期。
相关代码
创建字典的代码:
n = len(df.index) lengths = {} for i in range(0,n): lengths[i] = len(df.at[i,'col'])
获取最值的错误代码:
maximum = max(lengths) minimum = min(lengths)
转为DataFrame列后的正确取值代码:
minimum = min(df.loc[:,'lengths'])
问题原因
在Python中,直接对字典调用max()或min()时,默认只会遍历字典的键(keys),而非值(values)。你创建的字典键是0到n-1的连续整数,所以max(lengths)返回最大的键n-1,min(lengths)返回最小的键0,完全和目标的长度值无关。
而将字典转为DataFrame的Series列后,调用min()时会默认遍历Series的值,因此能得到正确的长度最值。
解决方法
直接从字典获取值的最值
如果要保留字典结构,只需明确指定遍历字典的值:
# 获取长度的最大值 maximum = max(lengths.values()) # 获取长度的最小值 minimum = min(lengths.values())
如果需要同时获取最值对应的索引(键)和长度值,可以这样写:
# 获取值最大的键值对(索引+长度) max_item = max(lengths.items(), key=lambda x: x[1]) # 获取值最小的键值对(索引+长度) min_item = min(lengths.items(), key=lambda x: x[1])
更高效的Pandas写法
其实无需手动循环创建字典,Pandas可以直接生成长度列,代码更简洁高效:
# 直接生成字符串长度列 df['lengths'] = df['col'].str.len() # 获取最值 max_length = df['lengths'].max() min_length = df['lengths'].min()
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

