我已经在这项任务上工作了一段时间,任务是编写一个将英文文本翻译成瑞典语的函数。我用key& amp;创建了一个dicitonary value,其中key是英文单词,value是瑞典单词。
我是如何思考的: 我在考虑应该有2个for循环。第一个应该通过字典中的键和值迭代,第二个应该通过字符串迭代,之后应该有一个条件,它检查字典中的键是否等于字符串中的单词。 如果是这样,请将密钥的值附加到列表中。
问题: 该函数返回一个空列表。
这是我的代码:
def translate(a):
trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"år"}
translated = []
for k, v in trs.iteritems():
for i in a.split(" "):
if trs[k] == i:
translated.append(trs[v])
return translated
print translate("merry christmas and happy new year")
答案 0 :(得分:4)
您的代码存在多个问题。
第一个是你迭代字典中的键值对,然后尝试在这里使用值作为键:if trs[k] == i:
和translated.append(trs[v])
这些应该只是{{1} }和k
代替v
和trs[k]
。
第二个问题是一个更大的问题:修复前一个问题后,代码仍然给出了错误的答案。这些词是随机顺序的。这是因为您遍历外部循环中的字典项而不是单词本身。通过更改循环的顺序可以很容易地解决这个问题。
第三是我认为函数应该返回一个字符串。最后只需返回trs[v]
。
第四是你实际上不使用字典作为字典。您将它用作列表,但不是它们的使用方式。 " ".join(translated)
是值的直接映射,您不需要一直迭代所有条目。使用dict
和in
运算符。
以下是此代码的外观:
[]
答案 1 :(得分:3)
您希望在翻译中保留单词顺序,这意味着对原始单词的迭代应该驱动算法(而不是对翻译词典进行迭代)。
无需迭代字典:键值数据结构的目的是允许您通过键快速检索单个项目。
字典有一个get()
方法,在密钥可能存在或不存在的情况下很方便。
只是猜测,但似乎该方法应该返回文本而不是翻译单词列表(相应地调整)。
所有这一切归结为:
return ' '.join(trs.get(w, w) for w in orig_text.split())
答案 2 :(得分:2)
我认为这就是你要找的东西:
trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"år"}
translated = []
for i in a.split(" "): # loop over sentence and try to translate every word
if i in trs: # the word to be translated is a key in your dict
translated.append(trs[i]) # add the translation if present
# else
# translated.append(i)
return ' '.join(translated) # makes more sense than returning a list
答案 3 :(得分:2)
def translate(a):
trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"ar"}
translated = []
for i in a.split(" "):
for k, v in trs.iteritems():
if i == k:
translated.append(trs[i])
return translated
print translate("merry christmas and happy new year")
# output:
# ['god', 'jul', 'och', 'gott', 'nytt', 'ar']
答案 4 :(得分:0)
new Date(ms) gives 1970 year values
def translate(a):
trs = {"merry":"god", "christmas":"jul", "and":"och", "happy":"gott", "new":"nytt", "year":"år"}
translated = []
for i in a.split(" "):
for k, v in trs.iteritems():
if k == i:
translated.append(trs[k])
return translated
在第6行中,您正在执行trs [k],它将在trs [k]处返回值,该值不等于任何子字符串。这就是你得到一个空列表的原因。