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)
我的电话簿任务有问题。首先,我必须对数字进行降序排序,然后对所有数字求和。我认为排序是正确的,但如果不正确请告诉我。 我最大的问题是总结所有数字。第二个代码块来自我的教授作为帮助,但它并没有真正帮助我。我尝试了几种方法(使用 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)