嵌套列表排序

时间:2018-12-23 23:29:16

标签: python

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

它抛出错误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()

2 个答案:

答案 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],因此您需要更改为列表,从而进行更改。