2016-09-27 62 views
0

我的項目:在列表中使用數字來訪問項目在字典中的蟒蛇

my_list = [18, 15, 22, 22, 25, 10, 7, 25, 2, 22, 14, 10, 27] 

在列表中,我想用「for循環使用這些訪問的項目我的字典裏',我會將這些項目添加到新列表中。我的字典是這樣的:

my_dict = {1:"A", 2:"B", 3:"C" ... 26:"Z", 27:"_"} 

我該怎麼做到這一點?我試過這樣的循環:

for i in my_list: 
    my_newlist = [] 
    letters = number_value[keys.index(i)] 
    letters.append(my_newlist) 

但是我收到了錯誤。乾杯。

在我的代碼的另一個領域我有翻領的功能,我在其中通過與搜索項拿到鑰匙:

for i in my_list: 
    third_list = [] 
    num_val = keys[values.index(i)] + key_shift 
    third_list.append(num_val) 
    print(num_val) 

它在置換密碼碼被使用。上面的示例工作,它在字典中查找對應於「A」的密鑰並將該密鑰存儲在列表中。

+0

哪裏都是'number_value'和'鍵定義? –

+0

..你爲什麼要做'key.index(i)'?你期待在信中看到什麼結果? – SuperSaiyan

+0

@SuperSaiyan固定。對不起,我很困惑 – Kyle

回答

2

您可以簡單地用一個list comprehension,你含蓄地通過你的號碼my_list的列表循環和檢索值使用相應數量的一個關鍵組成你的字典my_dict

my_dict = {i: chr(i+64) for i in range(27)} 
my_list = [1, 5, 19] 

result = [my_dict[i] for i in my_list] 
print(result) 

產量

['A', 'E', 'S'] 

請確保檢查KeyError,因爲您的清單my_list可能包含字典my_dict中未顯示的數字。如果你想避免明確的異常處理(默默忽略丟失的鑰匙),你可以做這樣的事情:

result = [my_dict[i] for i in my_list if i in my_dict.keys()] 
print(result) 
+0

謝謝!它的工作 – Kyle

1

你剪斷的代碼似乎並不因爲你正在使用的不是定義的變量number_values是完整的在你的例子中。 編輯:你仍然使用的代碼中沒有定義的變量剪斷你提供,所以我不能重現你的錯誤。另外你每次

覆蓋你third_listmy_newlis我認爲在my_list鍵也存在於my_dict:如果不這樣做的@jbndlr告訴你,檢查KeyError

my_list = [1, 2, 3, 26, 27] 

my_dict = {1:"A", 2:"B", 3:"C" , 26:"Z", 27:"_"} 

my_newlist = [] 
for i in my_list: 
    letters = my_dict[i] 
    my_newlist.append(letters) 

print my_newlist 

這會產生這些項目。如果您正在尋找其他的東西讓我知道這樣我就可以調整答案

+0

是的,它來自我正在處理的代碼的提取,我不得不簡化變量名稱,因爲我在代碼中有很多代碼,當代碼完成時,我將通過https將它上傳到我的GitHub: //github.com/Bluestormy/Python。乾杯! – Kyle

1

其他人所指出的不一致您的代碼示例中,輕快地忽略那些:)

my_list = [18, 15, 22, 22, 25, 10, 7, 25, 2, 22, 14, 10, 27] 
my_dict = {0: '@', 1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F', 7: 'G', 8: 'H', 9: 'I', 10: 'J', 11: 'K', 12: 'L', 13: 'M', 14: 'N', 15: 'O', 16: 'P', 17: 'Q', 18: 'R', 19: 'S', 20: 'T', 21: 'U', 22: 'V', 23: 'W', 24: 'X', 25: 'Y', 26: 'Z', 27: '_'} 
my_newlist = [] 
for i in my_list: 
    letters = my_dict[i] 
    my_newlist.append(letters) 

my_newlist 
['R', 'O', 'V', 'V', 'Y', 'J', 'G', 'Y', 'B', 'V', 'N', 'J', '_'] 

#Now reverse the operation to build third_list 

third_list = [] 
for i in my_newlist: 
    key = my_dict.keys()[my_dict.values().index(i)] 
    third_list.append(key) 

third_list 
[18, 15, 22, 22, 25, 10, 7, 25, 2, 22, 14, 10, 27]