如何将两个值附加到字典中的键上
它抛出错误str对象没有附加属性
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()
答案 0 :(得分:5)
您需要在字典中添加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"]), ... ]
答案 1 :(得分:2)
如果我理解正确,则需要更改以下行:
score_list[score]=name
收件人:
score_list[score]=[name]
在当前版本中,您将字符串name
分配给score_list[score]
,因此您需要更改为列表,从而进行更改。