如何将两个值附加到字典中的键
抛出错误 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"]), ... ]
