我发现this discussion,这引起了这一点:
d = {spam(a): 'a', spam(b): 'BB', spam(c): 'Ccc'}
这不仅凸显,这必须是一个运行时的事情,但也有情况下,您可能要允许它。例如,当正在生成的代码,或字典内涵,其覆盖默认值等
defaults = {'a': 1, 'b': 2}
specific = {'b': 3, 'c': 4}
combined = {key: val for key, val in itertools.chain(defaults.items(), specific.items())}
作为我个人而言,它也与.update
非常适合,它增加或更新的关键,而不是抱怨的时候它已经存在。
作为一种方法来防止这种情况,当密钥是有效的Python的关键字,你可以使用:
d = dict(a=1, b=2, b=3)
你当然也可以让自己的包装,但它会很难看:
def uniqdict(items):
dct = {}
for key, val in items:
if key in dct:
raise KeyError('key {0:} already exists'.format(key))
dct[key] = val
return dct
uniqdict((('a', 1), ('b', 2), ('b', 3)))