我知道我以前曾经问过这个问题,但是当我测试它时,当我说这个函数解包太多变量时,我仍然不确定这意味着什么。任何人都可以帮助我让我的函数匹配文档字符串中的内容吗?
def sorted_images(image_dict):
'''(dict) -> list of str
Given an image dictionary return a list of the filenames
sorted by date.
>>> d = {'image1.jpg': ['UTSC', '2017-11-03','Happy Friday'], \
'image2.jpg': ['UTSC', '2017-11-04', 'Happy Sat.']}
>>> sorted_images(d)
['image1.jpg', 'image2.jpg']
'''
new_list = []
new_list = image_dict.keys()
for (filename, date) in new_list:
if filename not in image_dict:
new_list.append(filename)
return new_list
答案 0 :(得分:0)
这是一种方法。理解问题的关键是我们需要返回排序列表。为此,我们通常使用sorted()
。
def sorted_images(image_dict):
'''(dict) -> list of str
Given an image dictionary return a list of the filenames
sorted by date.
>>> d = {'image1.jpg': ['UTSC', '2017-11-03','Happy Friday'], \
'image2.jpg': ['UTSC', '2017-11-04', 'Happy Sat.']}
>>> sorted_images(d)
['image1.jpg', 'image2.jpg']
'''
return sorted(image_dict, key=lambda x: image_dict[x][1])
注意:
sorted()
(或通常迭代字典)会返回一个键列表。key=
arg指定排序顺序。在这种情况下,我们根据日期字段进行排序。 image_dict[x]
返回一个列表,image_dict[x][1]
返回日期字段。如果您对lambda
过敏,可以将其替换为命名函数,如下所示:
def sorted_images(image_dict):
'''docstring goes here'''
def key_func(x):
return image_dict[x][1]
return sorted(image_dict, key=key_func)
并且,如果您被禁止使用key=
参数sorted()
,则可以利用tuple
按字典顺序排序的事实。构造一个看起来像(date, image_name)
的元组列表,对该列表进行排序,然后提取图像名称。这有时被称为decorate-sort-undecorate成语。
def sorted_images(image_dict):
'''docstring'''
date_name_list = [(v[1], k) for k,v in image_dict.items()]
sorted_date_name_list = sorted(date_name_list)
sorted_name_list = [item[1] for item in sorted_date_name_list]
return sorted_name_list
答案 1 :(得分:0)
这不是一个完整的答案,但是你得到该消息的原因是你有new_list = image_dict.keys()
但是后来试图用for (filename, date) in new_list
解压缩它。要解决此问题,您可以将image_dict.keys()
替换为image_dict.items()
。