Python函数返回空列表

时间:2016-06-04 16:50:09

标签: python

我已经在这项任务上工作了一段时间,任务是编写一个将英文文本翻译成瑞典语的函数。我用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")

5 个答案:

答案 0 :(得分:4)

您的代码存在多个问题。

第一个是你迭代字典中的键值对,然后尝试在这里使用值作为键:if trs[k] == i:translated.append(trs[v])这些应该只是{{1} }和k代替vtrs[k]

第二个问题是一个更大的问题:修复前一个问题后,代码仍然给出了错误的答案。这些词是随机顺序的。这是因为您遍历外部循环中的字典项而不是单词本身。通过更改循环的顺序可以很容易地解决这个问题。

第三是我认为函数应该返回一个字符串。最后只需返回trs[v]

第四是你实际上不使用字典作为字典。您将它用作列表,但不是它们的使用方式。 " ".join(translated)是值的直接映射,您不需要一直迭代所有条目。使用dictin运算符。

以下是此代码的外观:

[]

答案 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]处返回值,该值不等于任何子字符串。这就是你得到一个空列表的原因。