我正在尝试使用下面的代码反转意大利语 - 英语词典。
有些术语有一个翻译,而有些术语有多种可能性。如果一个条目有多个翻译,我会遍历每个单词,将其添加到英语 - 意大利语单词(如果尚未存在)。
如果只有一个翻译它不应该迭代,但是当我编写代码时,它确实如此。此外,只有具有多个翻译的术语中的最后一个翻译被添加到字典中。我无法弄清楚如何重写代码来解决应该是一个非常简单的任务
def rk4(f, x0, y0, x1, n):
vx = [0] * (n + 1)
vy = [0] * (n + 1)
h = (x1 - x0) / float(n)
vx[0] = x = x0
vy[0] = y = y0
for i in range(1, n + 1):
k1 = h * f(x, y)
k2 = h * f(x + 0.5 * h, y + 0.5 * k1)
k3 = h * f(x + 0.5 * h, y + 0.5 * k2)
k4 = h * f(x + h, y + k3)
vx[i] = x = x0 + i * h
vy[i] = y = y + (k1 + k2 + k2 + k3 + k3 + k4) / 6
return vx, vy
运行此代码时,我得到:
from collections import defaultdict
def invertdict():
source_dict ={'paramezzale (s.m.)': ['hog', 'keelson', 'inner keel'], 'vento (s.m.)': 'wind'}
english_dict = defaultdict(list)
for parola, words in source_dict.items():
if len(words) > 1: # more than one translation ?
for word in words: # if true, iterate through each word
word = str(word).strip(' ')
print(word)
else: # only one translation, don't iterate!!
word = str(words).strip(' ')
print(word)
if word in english_dict.keys(): # check to see if the term already exists
if english_dict[word] != parola: # check that the italian is not present
#english_dict[word] = [english_dict[word], parola]
english_dict[word].append(parola).strip('')
else:
english_dict[word] = parola.strip(' ')
print(len(english_dict))
for key,value in english_dict.items():
print(key, value)
而不是
hog
keelson
inner keel
w
i
n
d
2
inner keel paramezzale (s.m.)
d vento (s.m.)
答案 0 :(得分:1)
在字典中的任何地方使用列表会更容易,例如:
source_dict = {'many translations': ['a', 'b'], 'one translation': ['c']}
然后你需要2个嵌套循环。现在你并不总是在运行内循环。
for italian_word, english_words in source_dict.items():
for english_word in english_words:
# print, add to english dict, etc.
如果您无法更改source_dict
格式,则需要明确检查类型。我会转换列表中的单个项目。
for italian_word, item in source_dict.items():
if not isinstance(item, list):
item = [item]
完整代码:
source_dict ={'paramezzale (s.m.)': ['hog', 'keelson', 'inner keel'], 'vento (s.m.)': ['wind']}
english_dict = defaultdict(list)
for parola, words in source_dict.items():
for word in words:
word = str(word).strip(' ')
# add to the list if not already present
# english_dict is a defaultdict(list) so we can use .append directly
if parola not in english_dict[word]:
english_dict[word].append(parola)