我需要帮助尝试编写一个函数来检测是否存在包含多个键的字典。因此,当我使用name_to_age时,字典已经是唯一的,因此我不知道如何应用此检查。
例如
# the test function should raise an error since there is 2 duplicate keys
name_to_age = {'Sam': 2, 'Sam': 4, 'Alex: 14}
答案 0 :(得分:1)
最初的问题是编写一个可以检测字典中重复键的函数。严格来说,字典不能包含重复的键,但它可以包含具有相同值的对象:Multiple identical keys in a Python dict - yes, you can!
诀窍是使用对象而不是字符串作为键,并覆盖哈希比较(参见How hash collisions are resolved in Python dictionaries):
class person(object):
def __init__(self,name):
self.name = name
def __eq__(self, other):
return False
alternate = {person("Andrew") : "Cambridge", person("Barbara") : "Bloomsbury", person("Andrew"): "Corsica"}
print alternate
下面的评论讨论了这些是否是重复密钥的技术方面,但这是一个侧面问题。回到最初的问题,如果字典实际上可以存在重复的键,那么哪个函数会检测到它们?
要查找重复的密钥,您可以执行以下操作:
def list_duplicates(d):
seen = set()
duplicates = set( x.name for x in d if x.name in seen or seen.add(x.name) )
return list( duplicates )
(改编自另一个问题:Find and list duplicates in Python list)
是的,multidict和querydict结构为每个键创建了值列表,但那些不能解决原始问题的重复键假设。这个答案创造了一个重复"键"是可能的,并提供检测它们的功能。