在Learn Python the Hard Way,Lesson 39中,您創建了一個hashmap來導入並用作Python內置字典的模擬。學習Python-定義在hashmap中返回鍵的多個值
最初,它是這麼寫的HashMap中允許一次只有一個關鍵:
def get(aMap, key, default = None):
"""Gets the value in a bucket for the given key, or the default"""
i, k, v = get_slot(aMap, key, default = default)
return k, v
def set(aMap, key, value):
"""Sets the key to the value, replacing any existing values"""
bucket = get_bucket(aMap, key)
i, k, v = get_slot(aMap, key)
if i >= 0:
#the key exists, replace it
bucket[i] = (key, value)
else:
#The key does not exist, append and create it
bucket.append((key, value))
在研究演練,如果一個挑戰是要改變它,這樣的鍵可以有多個值。我通過附加值來做到這一點,無論密鑰是否存在。
def set(myMap, key, value):
bucket = get_bucket(myMap, key)
i, k, v = get_slot(myMap, key)
bucket.append((key, value))
如果我運行下面的,它其實名單的一切我進入,而不會覆蓋像第一套功能將有:
jazz = myHashmap2.new()
myHashmap2.set(jazz, 'Miles Davis', 'Flamenco Sketches')
myHashmap2.set(jazz, 'Miles Davis', 'Kind of Blue')
myHashmap2.set(jazz, 'Duke Ellington', 'Beginning to see the light')
myHashmap2.set(jazz, 'Billy Strayhorn', 'Lush Life')
print "-----List Test-----"
myHashmap2.list(jazz)
我得到:
-----List Test-----
Billy Strayhorn Lush Life
Miles Davis Flamenco Sketches
Miles Davis Kind of Blue
Duke Ellington Beginning to see the light
然而,我似乎無法獲得'獲取'功能來打印'Miles Davis'的值。它總是達到'弗拉門戈草圖'的價值,並留下'種藍'。
print "-----Get Test-----"
print ex39_hashmap.get(jazz, 'Miles Davis')
print ex39_hashmap.get(jazz, 'Duke Ellington')
print ex39_hashmap.get(jazz, 'Billy Strayhorn')
-----Get Test-----
('Miles Davis', 'Flamenco Sketches')
('Duke Ellington', 'Beginning to see the light')
('Billy Strayhorn', 'Lush Life')
我已經試過幾件事情:
def get(myMap, key, default = None):
i, k, v = get_slot(myMap, key, default = default)
if k == key:
return (k, v)
def get(myMap, key, default = None):
bucket = get_bucket(myMap, key)
i, k, v = get_slot(myMap, key, default = default)
for i, k in bucket:
if k == key:
return (k, v)
我認爲它需要有一些類型的循環,通過每個鍵運行沒有當它看到它的第一次剛剛停止,但我可以不知道會做什麼。
此外,我寫的循環只是返回「無」每個獲得。所以我顯然缺少一些東西(或幾件事)。
我錯過了什麼?謝謝。
你第一次'返回'k ==鍵,你期望會發生什麼? – jonrsharpe 2014-08-29 15:32:22
我不確定我在想什麼。它有道理,它會返回第一個k ==鍵,但我想如果我做了一個循環,它會返回_every_實例,其中k ==鍵。顯然,我錯了。 – datahappy 2014-08-29 15:33:52
你需要找出一種方法來移動'for'循環外部的'return' * - 一旦函數返回'return',就結束了。 – jonrsharpe 2014-08-29 15:34:52