【发布时间】:2016-02-24 02:48:03
【问题描述】:
我正在尝试创建一个接受数据库和年份的函数,它根据名称计算名称的排名,然后更新数据库。
database = {('Spot','DOG'): {2013: (612, 1), 2014: (598, 3)},
('Princess','CAT'): {2013: (713, 2)},
('Smokey', 'CAT'): {2013: (523, 1), 2014: (514, 1)},
('Fido', 'DOG'): {2013: (558, 2), 2014: (655, 1)},
('Sparky','DOG'): {2104: (572, 2)}}
我必须将猫和狗分别排名,最流行的名字是排名 1,所以降序排列。
我只能使用基本的表达式和语句,len, range, enumerate, int, get, items, keys, values, pop, copy, popitem, update, append, insert, extend,min, max, index, split, join, replace, sorted, sort, reversed, reverse, sets 和基本的表达式和语句,我可以编写自己的函数并使用它们。
我不能导入模块或使用 lambda 或除允许列表中的内容之外的任何东西。这就是为什么我被卡住了。这是我的第一堂编程课。我不知道如何对元组进行排序。我知道如何对嵌套字典进行排序,这里有一篇很棒的帖子,但我被困在这个元组上。能否请你帮忙。
def rank_names_for_one_year(db, year):
list = []
list_2 = []
for k in db:
if 'MALE' in k:
for key in db[k]:
if year == key:
for n in db[k][year]:
list.append(n)
break
if 'FEMALE' in k:
for key in db[k]:
if year == key:
for n in db[k][year]:
list_2.append(n)
break
list.sort()
new_list = [()]
list_2.sort()
new_list_2 = [()]
for k in db:
if 'MALE' in k:
for i in range(len(list)):
new_list.append((list[i],i+1))
for key in db[k]:
if year == key:
for n in db[k][year]:
for i in range(len(new_list)):
for j in range(len(new_list[i])):
if new_list[i][j] == n:
db[k][year] = new_list[i]
if 'FEMALE' in k:
for i in range(len(list_2)):
new_list_2.append((list_2[i],i+1))
for key in db[k]:
if year == key:
for n in db[k][year]:
for i in range(len(new_list_2)):
for j in range(len(new_list_2[i])):
if new_list_2[i][j] == n:
db[k][year] = new_list_2[i]
【问题讨论】:
-
到目前为止你尝试了什么?
-
好的,抱歉。第一次问问题。我必须找出如何更新
-
我更新正确了吗?
-
我在您的“数据库”中添加了一些换行符,希望更清楚您从什么数据开始——但是,在我看来,您还没有得到所有的括号/大括号放在正确的位置。
-
我不明白您对数据库所做的更改。第一个字典键是字符串元组,值是另一个字典,键是年份,值是整数元组。
标签: python sorting dictionary tuples ranking