简介
字典是 Python 中的一种基本数据结构,它允许你存储键值对。有时,你可能需要反转一个字典,这意味着交换键和值,使值成为键,键成为值。在这个挑战中,你将负责编写一个函数,用于反转一个具有非唯一可哈希值的字典。
反转字典
编写一个函数 invert_dictionary(obj),它接受一个字典 obj 作为输入,并返回一个键值颠倒的新字典。输入字典将具有非唯一的可哈希值。如果两个或更多键具有相同的值,该函数应将这些键追加到输出字典中的一个列表中。
要解决这个问题,你可以按照以下步骤进行:
- 创建一个
collections.defaultdict,将每个键的默认值设为列表。 - 使用
dictionary.items()并结合循环,通过dict.append()将字典的值映射为键。 - 使用
dict()将collections.defaultdict转换为常规字典。
函数签名:def invert_dictionary(obj: dict) -> dict:
from collections import defaultdict
def collect_dictionary(obj):
inv_obj = defaultdict(list)
for key, value in obj.items():
inv_obj[value].append(key)
return dict(inv_obj)
ages = {
'Peter': 10,
'Isabel': 10,
'Anna': 9,
}
collect_dictionary(ages) ## { 10: ['Peter', 'Isabel'], 9: ['Anna'] }
总结
在这个挑战中,你学习了如何反转一个具有非唯一可哈希值的字典。你使用了一个 collections.defaultdict,将每个键的默认值设为列表,然后通过 dict.append() 将字典的值映射为键。最后,你使用 dict() 将 collections.defaultdict 转换为常规字典。