我有物品:
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 :(得分:2)
您只需使用list comprehension隐式循环遍历您的数字列表my_list
,然后使用相应的数字作为关键字从{d} 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)
答案 1 :(得分:1)
您剪切的代码似乎并不完整,因为您使用的是您的示例中未定义的变量number_values
。
编辑:您仍然使用您提供的代码中未定义的变量,因此我无法重现您的错误。此外,您每次都会覆盖third_list
和my_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
这会产生物品。如果您正在寻找别的东西,请告诉我,以便我可以调整答案
答案 2 :(得分: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]