Skip to main content
 首页 » 编程设计

python之嵌套列表排序

2025年05月04日14Free-Thinker

如何将两个值附加到字典中的键

抛出错误 str object has no attribute append

score_list={} 
for _ in range(int(input())): 
    score=float(input()) 
    name=input() 
    if score in score_list: 
        score_list[score].append(name) 
    else: 
        score_list[score]=name 
new_list=[] 
for score in score_list: 
    new_list.append([score,score_list[score]]) 
new_list.sort() 

请您参考如下方法:

您需要将 list 添加到您的字典中 - 而不是直接添加字符串。我知道的三种方式,从最坏到最好。


您可以使用普通字典并将代码更改为

score_list={} 
for _ in range(int(input())): 
    score=float(input()) 
    name=input() 
    if score in score_list: 
        score_list[score].append(name) 
    else: 
        score_list[score] = [name]  # add as 1-elem list 

或使用 dict.setdefault(key,defaultvalue) :

score_list={} 
for _ in range(int(input())): 
    score=float(input()) 
    name=input() 
    k = score_list.setdefault(score,[]) # create key if needed with empty list 
    k.append(name) 

或使用 collections.defaultdict(list) .

score_list=defaultdict(list) 
for _ in range(int(input())): 
    score=float(input()) 
    name=input() 
    score_list[score].append(name)  # defaultdict handles list creation for you 

最后一种方法性能最高 - setdefault(score,[]) 创建大量空的默认列表,如果键已经存在则不使用这些列表。


如果您需要前 n 个结果,您可以直接从 dictionaries item()s 创建它:

n = 5 
top_n = sorted(score_list.items(), reverse=True) [:n]  # sorts by max score first  
# top_n  is a list of tuples:  [ (10000,["a","b","c"]) , (9999, ["b"]), ... ]