我必须编写以下函数(以及尝试编写的函数)。显然我的代码有问题,或者我不会在这里发布:)基于尝试使用它时给我的消息,我知道出了什么问题,并且我理解了什么—编写image_dict [0] [ 1]不起作用,因为密钥不是0。我需要知道确切使用该密钥的方式,但是密钥当然可以是任何东西,所以我想知道是否可以轻松更改代码以使其适用于任何键。例如,我可以在0处放置一些内容,以便它适用于所有键,而不必指定确切的键吗?谢谢!

def create_date_dict(image_dict):
'''(dict) -> dict

Given an image dictionary, return a new dictionary
where the key is a date and the value  is a list
of filenames of images taken on that date.

>>> d = {'image1.jpg': ['UTSC', '2017-11-03','Happy Friday']}
>>> date_d = create_date_dict(d)
>>> date_d == {'2017-11-03': ['image1.jpg']}
True
'''
result = {}
for (k, v) in image_dict.items():
    result[image_dict[0][1]] = [image_dict[0]]
return result

最佳答案

让我们首先通过示例了解实际问题:


  示例代码:


对于这些类型的列表问题,有一种模式:

因此,假设您有一个列表:

a=[(2006,1),(2007,4),(2008,9),(2006,5)]


并且您想要将此转换为字典,作为元组的第一个元素(作为键)和元组的第二个元素。就像是 :

{2008: [9], 2006: [5], 2007: [4]}


但是还有一个陷阱,您还希望那些具有不同值但键相同的键,例如(2006,1)和(2006,5)键相同,但值不同。您希望这些值仅附加一个键,以便预期输出:

{2008: [9], 2006: [1, 5], 2007: [4]}


对于此类问题,我们执行以下操作:

首先创建一个新的字典,然后遵循以下模式:

if item[0] not in new_dict:
    new_dict[item[0]]=[item[1]]
else:
    new_dict[item[0]].append(item[1])


因此,我们首先检查key是否在新字典中,如果已经存在,则将重复key的值添加到其值中:

完整代码:

a=[(2006,1),(2007,4),(2008,9),(2006,5)]

new_dict={}

for item in a:
    if item[0] not in new_dict:
        new_dict[item[0]]=[item[1]]
    else:
        new_dict[item[0]].append(item[1])

print(new_dict)



  现在,您的解决方案无需任何外部模块:


d = {'image1.jpg': ['UTSC', '2017-11-03','Happy Friday'], 'image2.jpg': ['UTSC', '2017-09-04','Happy Monday'], 'image3.jpg': ['UTSC', '2017-11-03','Happy Monday']}
def create_date_dict(image_dict):
    date_dict={}
    for key,value in image_dict.items():
        if value[1] not in date_dict:
            date_dict[value[1]]=[key] #notice here carefully , we have to store key in list so we can append values to it in else part of condition we did `[key]` , not `key`
        elif key not in date_dict[value[1]]:
            date_dict[value[1]].append(key)

    return date_dict

print(create_date_dict(d))


输出:

{'2017-09-04': ['image2.jpg'], '2017-11-03': ['image3.jpg', 'image1.jpg']}

关于python - 根据先前词典中的值创建新词典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47245545/

10-12 23:19