You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字典迭代报错:'list'对象无'items'属性,如何解决?

问题分析与解决办法

嘿,我来帮你拆解下这个问题!

为什么字典会变成列表?

你代码里的map = sorted(map)是关键坑点——当你把字典传入sorted()函数时,它默认只会提取字典的键,返回一个由键组成的列表。这就导致原本存储键值对的字典变量map被覆盖成了普通列表,后面再调用map.items()(或者map.items)自然会报错,因为列表根本没有items这个属性呀!

怎么解决这个问题?

首先要明确你想要的排序目标:是对字典的键值对按距离排序,对吧?那你需要让sorted()返回排序后的键值对集合,而不是单纯的键列表。另外还要注意一个隐藏问题:字典的键是唯一的,如果数组里有两个元素到x的距离相同,后面的元素会直接覆盖前面的,这会导致数据丢失,可能不符合你找“第三远”的需求。

下面给你两种修正方案:

方案1:改用列表存储(距离, 元素)元组(推荐)

这种方式不会丢失重复距离的元素,更适合你的需求:

def thirdfarthestdistance(arr, x):
    # 用列表存储每个元素的(距离, 元素)元组
    distance_pairs = []
    for elem in arr:
        dist = abs(elem - x)
        distance_pairs.append((dist, elem))
    
    # 按距离升序排序,如果要找最远的可以加reverse=True
    sorted_pairs = sorted(distance_pairs, key=lambda item: item[0])
    
    count = 0
    for dist, elem in sorted_pairs:
        print(elem)
        count += 1
        if count == 3:
            return elem

方案2:保留字典但处理重复键

如果一定要用字典,可以把字典的值设为列表,存储相同距离的所有元素:

def thirdfarthestdistance(arr, x):
    dist_map = {}
    for elem in arr:
        dist = abs(elem - x)
        # 距离不存在就创建空列表,存在就追加元素
        if dist not in dist_map:
            dist_map[dist] = []
        dist_map[dist].append(elem)
    
    # 对距离(字典的键)进行排序
    sorted_dists = sorted(dist_map.keys())
    
    count = 0
    # 先遍历排序后的距离,再遍历每个距离对应的元素
    for dist in sorted_dists:
        for elem in dist_map[dist]:
            print(elem)
            count += 1
            if count == 3:
                return elem

额外提醒

你之前写的map.items是错误的写法,即使是字典也需要加括号map.items()才能返回键值对迭代器,但因为前面的sorted已经把字典变成了列表,所以不管加不加括号都会报错哦。

内容的提问来源于stack exchange,提问作者merry-go-round

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:09:22