Python:在字典中排序求和

Python: sort and sum in a dictionary

我的电话簿任务有问题。首先,我必须对数字进行降序排序,然后对所有数字求和。我认为排序是正确的,但如果不正确请告诉我。 我最大的问题是总结所有数字。第二个代码块来自我的教授作为帮助,但它并没有真正帮助我。我尝试了几种方法(使用 if 函数、计数等)。也许我只是遗漏了一些东西所以请帮助我。

这是词典

phoneBook = [{'fname': 'Sophia', 'lname': 'Thorarensen', 'number': '06508641036'},
 {'fname': 'Emma', 'lname': 'Blöndal', 'number': '06504228512'},
 {'fname': 'Olivia', 'lname': 'Thorarensen', 'number': '06501126965'},
 {'fname': 'Ava', 'lname': 'Hansen', 'number': '06762858077'},
 {'fname': 'Isabella', 'lname': 'Olsen', 'number': '06801324090'},
 {'fname': 'Evelyn', 'lname': 'Bergmann', 'number': '06805592151'},
 {'fname': 'Charlotte', 'lname': 'Andersen', 'number': '06762229010'},
 {'fname': 'Liam', 'lname': 'Briem', 'number': '06767141082'},
 {'fname': 'Oliver', 'lname': 'Briem', 'number': '06802647719'},
 {'fname': 'Noah', 'lname': 'Thorlacius', 'number': '06805539375'},
 {'fname': 'William', 'lname': 'Jensen', 'number': '06765392663'},
 {'fname': 'James', 'lname': 'Hjaltalín', 'number': '06508393585'},
 {'fname': 'Oliver', 'lname': 'Scheving', 'number': '06769395459'},
 {'fname': 'Benjamin', 'lname': 'Petersen', 'number': '06505619735'},
 {'fname': 'Sophia', 'lname': 'Andersen', 'number': '06763080277'},
 {'fname': 'Charlotte', 'lname': 'Petersen', 'number': '06766619175'},
 {'fname': 'Mia', 'lname': 'Möller', 'number': '06802090547'},
 {'fname': 'Amelia', 'lname': 'Nielsen', 'number': '06765209564'},
 {'fname': 'Mia', 'lname': 'Waage', 'number': '06802348806'},
 {'fname': 'Elijah', 'lname': 'Kvaran', 'number': '06507279982'},
 {'fname': 'Logan', 'lname': 'Jensen', 'number': '06508886974'},
 {'fname': 'Logan', 'lname': 'Fjeldsted', 'number': '06763174139'},
 {'fname': 'Lucas', 'lname': 'Norddahl', 'number': '06768229218'},
 {'fname': 'Mason', 'lname': 'Berndsen', 'number': '06807930516'}]

这是我的降序排序代码:

def sortAlg(listIn):
    total = 0
    for i in range(1, len(listIn)):
        person = listIn[i]
        j = i - 1
                
        while j >= 0 and (person['number'] > listIn[j]['number']):
            listIn[j + 1] = listIn[j]
            j -= 1
        listIn[j + 1] = person
        
    
    return total  # return the sum of all numbers here
    

这是我的教授提供的帮助

# run the algorithm on the phoneBook defined above
# the sorting algorithm is **in place**, which means the phoneBook changed after the call
t_num = sortAlg(phoneBook)
print('Sum of all numbers:', t_num)
print()
for i in phoneBook:
    print(i)
Thanks you in advance. 

你可以像这样用 pythonic 方式排序:

phoneBook_sorted = sorted(phoneBook, reverse=True, key= lambda x: int(x['number']))

然后sum

sum = 0
for x in phoneBook_sorted:
    sum += int(x['number'])

鉴于要求是 就地 排序,您可以这样做:

phoneBook.sort(key=lambda e: int(e['number']))

值得注意的是,问题中显示的样本数据有 phone 个数字作为字符串,它们的长度都相同。鉴于这种情况,实际上不需要在 lambda 中转换为 int

phone 个数字的总和(为什么?):

total = sum(int(e['number']) for e in phoneBook)