比方說,我有這樣的詞典:如何允許額外的字符在字典鍵
my_dict = {
hey: onevalue,
hat: twovalue,
how: threevalue
}
有沒有辦法考慮到一個關鍵的參考,同時具有可變,說在一個數字?
如my_dict [「HEY1」] = onevalue 或my_dict [「HEY2」] = onevalue
我試圖以允許這樣的變量,而不是從參考鍵剝離的數字。先謝謝你。
比方說,我有這樣的詞典:如何允許額外的字符在字典鍵
my_dict = {
hey: onevalue,
hat: twovalue,
how: threevalue
}
有沒有辦法考慮到一個關鍵的參考,同時具有可變,說在一個數字?
如my_dict [「HEY1」] = onevalue 或my_dict [「HEY2」] = onevalue
我試圖以允許這樣的變量,而不是從參考鍵剝離的數字。先謝謝你。
沒有。由於如何工作(作爲hash table),他們無法容納你想要的東西。您將不得不創建自己的類型並定義實現邏輯的方法。
根據我在Python中的位置,在引用密鑰之前剝離尾隨字符會更不令人沮喪和更具教育意義。感謝您的快速回復! – numb3rs1x
建立在this answer上,您可以定義自己的dict兼容類型去除尾隨數字;
import collections
class TransformedDict(collections.MutableMapping):
"""A dictionary which applies an arbitrary key-altering function before accessing the keys"""
def __init__(self, *args, **kwargs):
self.store = dict()
self.update(dict(*args, **kwargs)) # use the free update to set keys
def __getitem__(self, key):
return self.store[self.__keytransform__(key)]
def __setitem__(self, key, value):
self.store[self.__keytransform__(key)] = value
def __delitem__(self, key):
del self.store[self.__keytransform__(key)]
def __iter__(self):
return iter(self.store)
def __len__(self):
return len(self.store)
def __keytransform__(self, key):
for i in xrange(len(key)-1,-1,-1):
if not key[i].isdigit():
break
return key[:i]
a = TransformedDict()
a['hello'] = 5
print a['hello123']
>>> 5
所以,當你有'hey1'或'hey2'這個鍵的時候,你想得到'onevalue'嗎? – sberry
我不太確定我明白你在這裏要做什麼。忽略最後的數字以獲取和設置? –
這對兩者都是肯定的。我希望能夠向密鑰添加一個數字,並讓它返回相同的值,而不管密鑰是什麼。 – numb3rs1x