我發現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)))