我找到了一种可以让我使用以下值获取字典键的方法:
mydic.keys()[mydic.values().index(value)]
我的代码如下:
def déchiffrement(code, dico):
taille3 = len(code)
décodé = []
for i in range(taille3):
décodé.insert(i, dico.keys()[dico.values().index(code[i])])
return décodé
dico
是一个如下字典:
dico = {
"A": [1, 9],
"B": [12, 19],
...
"Z": [78, 108],
}
和code
是与字母对应的数字列表。 dico
中的数字永远不会相同。
然而,我得到了
AttributeError:'dict_values'对象没有属性'index'
我不明白,因为这段代码似乎适用于其他人的代码。
答案 0 :(得分:1)
Orange's answer以及对您的问题评论的评论是正确的;你(大概)是使用Python 3,其中dict.values()
返回dictionary view object而不是list
,并且不提供index()
函数。
但是,您似乎希望将每个代码单独映射回原始字符。为此,预先计算解码器要清晰得多:
def invert(dico):
# map values to keys, note the nested comprehension
return {i: k for k, v in dico.items() for i in v}
def decipher(code, dico):
# note that this result can be cached or even just
# computed outside the function
decoder = invert(dico)
# pass each code through the decoder map
return [decoder[c] for c in code]
print decipher([1, 9, 108], {
'A': [1, 9],
'B': [12, 19],
'C': [78, 108]
})
输出
['A', 'A', 'C']
答案 1 :(得分:0)
index
是list
的函数,而不是dict_values
返回的dico.values()
对象的函数。因此,请更改代码,以便将dico.values()
转换为列表:
def déchiffrement(code,dico):
taille3 = len(code)
décodé = []
for i in range(taille3):
décodé.insert(i, dico.keys()[list(dico.values()).index(code[i])]) # Changed here
return décodé