2015-06-30 117 views
1

我試圖編寫一個函數,它使用一個鍵值列表值,並生成一個對應於這些值的字符串。每個鍵碼包含2個值,第一個值對應於一個電話號碼,第二個值對應於定義每個號碼的值列表中的某個值。我無法提取這些值。 這是與每個號對應的值的列表:Python:從值列表中提取值

0 == [" "] 
1 == [".", ",", "?"] 
2 == ["a", "b", "c"] 
3 == ["d", "e", "f"] 
4 == ["g", "h", "i"] 
5 == ["j", "k", "l"] 
6 == ["m", "n", "o"] 
7 == ["p", "q", "r", "s"] 
8 == ["t", "u", "v"] 
9 == ["w", "x", "y", "z"]` 

如果我正在消耗鍵控值的列表是 按鍵:[[6,3],[0,1],[ 5,2]] 如何從上述定義中提取某些值? 我正在考慮使用.join(列表)和地圖一旦我有提取的值。

+0

一個/使一個字典或陣列出你有數據。通常是'[[''],['。',',','?'],...]或者是'{'0':[''],...}'。 b /使用您輸入的數據訪問數據:'''.join(按鍵中的(key,cnt)的值[key] [cnt - 1])' – njzk2

回答

1

嘗試使用列表的列表,像這樣:

lsts = [[" "], 
     [".", ",", "?"], 
     ["a", "b", "c"], 
     ["d", "e", "f"], 
     ["g", "h", "i"], 
     ["j", "k", "l"], 
     ["m", "n", "o"], 
     ["p", "q", "r", "s"], 
     ["t", "u", "v"], 
     ["w", "x", "y", "z"]] 

現在您可以通過其索引訪問每個子列表:

lsts[1] 
=> [".", ",", "?"] 

且由它的索引中的每個元素:

lsts[1][2] 
=> "?" 

現在很容易從按鍵的列表中提取值,如你問題中所示的,然後加入他們的行列:

keypresses = [[6, 3], [0, 1], [5, 2]] 
''.join(lsts[i][j-1] for i, j in keypresses) 
=> "n k" 

請注意,索引從零開始,所以我不得不從問題中給出的示例按鍵減去一個單位。

+1

感謝您提供易於理解和完美工作的解決方案! ! –

0

我建議你定義保存的數量和相應的值,像這樣一本字典:

keyvalmap = {0: [" "], 1: [".", ",", "?"]} #and so on... 

然後遍歷按鍵:

for key, times in keypresses: 
    print keyvalmal[key][times-1] # or whatever you want to do 
1

這應該做你想找的。

def key_pressed(key, character): 
    """ 
    :param key: index of keyboard button 
    :param character: desired character represented by key 
    :return: requested character 
    """ 
    lookup = [[" "], 
       [".", ",", "?"], 
       ["a", "b", "c"], 
       ["d", "e", "f"], 
       ["g", "h", "i"], 
       ["j", "k", "l"], 
       ["m", "n", "o"], 
       ["p", "q", "r", "s"], 
       ["t", "u", "v"], 
       ["w", "x", "y", "z"]] 

    return lookup[key][character] 


print(key_pressed(6, 2)) 
print(key_pressed(1, 2)) 
print(key_pressed(5, 1)) 

輸出:

o 
? 
k