是否有可能在python中以一種必須具有唯一鍵的方式設計字典,並且如果錯誤地添加字典中已有的鍵被拒絕。 謝謝如何強制Python中的字典只有唯一的密鑰?
回答
你總是可以創建自己的字典
class UniqueDict(dict):
def __setitem__(self, key, value):
if key not in self:
dict.__setitem__(self, key, value)
else:
raise KeyError("Key already exists")
請注意,'__init__'方法實際上並不需要,只是使用相同的參數調用父'__init__'。 – 2011-05-10 10:38:45
哇,我不知道,謝謝^^ – 2011-07-16 10:36:21
我認爲這是正確的答案,但我並不愛這個班的名字。看到我對最初問題的評論。也許像「InsertOnlyDict」或「NoUpdateDict」等更清晰? – BuvinJ 2017-03-05 16:00:57
您可以通過從dict
派生和重寫__setitem__
來創建自定義字典來拒絕字典中已有的項目。
你能舉個例子嗎?我不是那個親python.thx – Hossein 2011-05-10 09:31:14
@Hossein:@Jakobs答案提供了一個例子。 – 2011-05-10 09:35:56
這是setdefault的目的之前:
>>> x = {}
>>> print x.setdefault.__doc__
D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D
>>> x.setdefault('a', 5)
5
>>> x
{'a': 5}
>>> x.setdefault('a', 10)
5
>>> x
{'a': 5}
這也意味着你可以在字典中跳過「if key」:...:else「...」
>>> for val in range(10):
... x.setdefault('total', 0)
... x['total']+=val
...
0
0
1
3
6
10
15
21
28
36
>>> x
{'a': 5, 'total': 45}
這是一個可愛的答案,事實上重複的鑰匙被悄悄地吞噬 - 是否與「被拒絕」一樣?沒有例外。 – 2017-10-02 15:37:28
- 1. Python:如何附加到字典的現有密鑰?
- 2. 如何過濾只留下唯一字典的字典列表
- 3. 字典破壞密鑰的名稱[Python]
- 4. 如何使用python 3字典中的值查找密鑰?
- 5. (python)如何更改字典中的密鑰分配?
- 6. 如何將密鑰添加到字典列表中的字典?
- 7. '唯一'的唯一密鑰或索引
- 8. 的Python:如何附加型字典,相同的密鑰
- 9. 在具有相同密鑰的字典中合併兩個Python字典
- 10. 在python中,如何從字典中檢索密鑰?
- 11. 生成唯一的密鑰
- 12. JavaScript的唯一密鑰值
- 13. python:重寫基於單獨字典的單個字典密鑰
- 14. 如何根據指定給另一個字典中相同密鑰的值更改字典密鑰?
- 15. 如何在Python中複製另一個字典中的唯一鍵和值
- 16. 如何分配字典中現有密鑰的值?
- 17. 如何從字典中刪除具有最高值的密鑰?
- 18. 如何檢索字典中的所有密鑰?
- 19. Python從字典中刪除密鑰它是一個數字
- 20. 有沒有辦法在Python字典中保留重複密鑰
- 21. 在python中使用字典值獲取字典密鑰
- 22. MySQL:強制一個獨特的列而不使用唯一的密鑰
- 23. 帶字典的列表 - 所有密鑰的計數值(Python)
- 24. 如何使用新密鑰將一個字典中的值複製到另一個字典中?
- 25. 的Python:比較的2個字典密鑰和更新之一
- 26. 如何在Python字典中訪問密鑰
- 27. 如何從字典中獲取密鑰python
- 28. 校驗密鑰存在於Python字典
- 29. Python字典JSON密鑰,Val提取
- 30. 有一個特殊的字符,如python密鑰中的句號
我想指出,「唯一鍵」是字典的固有屬性。當您插入一個鍵/值對時,它會更新任何可能導致重複鍵的以前的條目。因此,你的問題讓我陷入了一個循環。現在,當我更仔細地閱讀這篇文章時,我明白你所要求的是防止這種更新 - 這是一個有效且可理解的擴展。我只是想爲其他讀者澄清這一點,所以他們不會認爲他們需要在更廣義的意義上防止重複密鑰。 – BuvinJ 2017-03-05 15:56:46
^是的,正如我們在下面user2197172的回答中看到的那樣,使用'setdefault'是補充:它悄悄地吞下嘗試添加重複鍵的嘗試。 – 2017-10-02 16:10:06