按日期将文件名从dict排序到str列表中

时间:2017-11-10 02:02:10

标签: python python-3.x

我知道我以前曾经问过这个问题,但是当我测试它时,当我说这个函数解包太多变量时,我仍然不确定这意味着什么。任何人都可以帮助我让我的函数匹配文档字符串中的内容吗?

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

2 个答案:

答案 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])

注意:

  • 将字典作为第一个arg传递给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()