Python 3.x 向现有键添加值而不覆盖

Python 3.x 向现有键添加值而不覆盖,python-3.x,Python 3.x,我正试图翻一本语言词典。问题是有些词有同义词。如何在不覆盖现有值的情况下输入同义词 latin_dic ={'apple': ['malum', 'pomum', 'popula'], 'fruit': ['baca', 'bacca', 'popum'], 'punishment': ['malum', 'multa']} new_dict={} for k,v in latin_dic.items(): for item in v:

我正试图翻一本语言词典。问题是有些词有同义词。如何在不覆盖现有值的情况下输入同义词

 latin_dic ={'apple': ['malum', 'pomum', 'popula'], 'fruit': ['baca', 'bacca', 'popum'], 'punishment': ['malum', 'multa']}
    new_dict={}
    for k,v in latin_dic.items():
        for item in v:
            if item in new_dict:
                new_dict[item] += k 
            else:
                new_dict[item]= k
    for k,v in sorted(new_dict.items()):
        print(k, '-', v)

这本词典的问题是malum=苹果和惩罚,通过我上面的努力,它被称为“苹果惩罚”。我知道串联是错误的,但它是我所能得到的最接近的。我不能使用append,或者说它给出了一个错误。如蒙指教,我将不胜感激。为了满足自己的需求,我正在尝试完成snakify课程,这是最后一个问题。

您不能使用append,因为它只适用于列表。但在新字典中,键始终是字符串,因此当您编写new_dict[item]=k时,您会说新字典的值只是一个字符串,而不是一个列表。我们可以很容易地解决这个问题:

latin_dic ={'apple': ['malum', 'pomum', 'popula'], 'fruit': ['baca', 'bacca', 'popum'], 'punishment': ['malum', 'multa']}
new_dict={}
for k,v in latin_dic.items():
  for item in v:
    if item in new_dict:
      new_dict[item].append(k)
    else:
      new_dict[item] = [k]

for k,v in sorted(new_dict.items()):
  print(k, '-', v)

现在,我们将新的dict值声明为列表,您可以使用append。

您不能使用append,因为它只适用于列表。但在新字典中,键始终是字符串,因此当您编写new_dict[item]=k时,您会说新字典的值只是一个字符串,而不是一个列表。我们可以很容易地解决这个问题:

latin_dic ={'apple': ['malum', 'pomum', 'popula'], 'fruit': ['baca', 'bacca', 'popum'], 'punishment': ['malum', 'multa']}
new_dict={}
for k,v in latin_dic.items():
  for item in v:
    if item in new_dict:
      new_dict[item].append(k)
    else:
      new_dict[item] = [k]

for k,v in sorted(new_dict.items()):
  print(k, '-', v)

现在,我们将新的dict值声明为列表,您可以使用append。

您需要确保新字典的每个值都是列表。而不是

new_dict[item] = k  # the value is a string
你需要

new_dict[item] = [k]  # the value is a list with the item
然后您可以附加到该列表中。 完整代码:

latin_dic ={'apple': ['malum', 'pomum', 'popula'], 'fruit': ['baca', 'bacca', 'popum'], 'punishment': ['malum', 'multa']}
new_dict={}
for k,v in latin_dic.items():
    for item in v:
        if item in new_dict:
            new_dict[item].append(k)
        else:
            new_dict[item] = [k]
for k,v in sorted(new_dict.items()):
    print(k, '-', v)

您需要确保新词典的每个值都是一个列表。而不是

new_dict[item] = k  # the value is a string
你需要

new_dict[item] = [k]  # the value is a list with the item
然后您可以附加到该列表中。 完整代码:

latin_dic ={'apple': ['malum', 'pomum', 'popula'], 'fruit': ['baca', 'bacca', 'popum'], 'punishment': ['malum', 'multa']}
new_dict={}
for k,v in latin_dic.items():
    for item in v:
        if item in new_dict:
            new_dict[item].append(k)
        else:
            new_dict[item] = [k]
for k,v in sorted(new_dict.items()):
    print(k, '-', v)

正如其他人发布的那样,修复方法是在新字典尚未包含具有关联值的键时,创建一个包含当前键的新列表

通过使用默认值为
[]
dict.get()
,可以避免在
if
语句中查找字典,如下所示:

latin_dic = {'apple': ['malum', 'pomum', 'popula'], 'fruit': ['baca', 'bacca', 'popum'], 'punishment': ['malum', 'multa']}
english_dic = {}

for k in latin_dic:
    for v in latin_dic[k]:
        english_dic[v] = english_dic.get(v, []) + [k]

for k in sorted(english_dic):
    print(k, '-', english_dic[k])
或者,执行此操作的更好方法是使用:


正如其他人发布的那样,修复方法是在新字典尚未包含具有关联值的键时,创建一个包含当前键的新列表

通过使用默认值为
[]
dict.get()
,可以避免在
if
语句中查找字典,如下所示:

latin_dic = {'apple': ['malum', 'pomum', 'popula'], 'fruit': ['baca', 'bacca', 'popum'], 'punishment': ['malum', 'multa']}
english_dic = {}

for k in latin_dic:
    for v in latin_dic[k]:
        english_dic[v] = english_dic.get(v, []) + [k]

for k in sorted(english_dic):
    print(k, '-', english_dic[k])
或者,执行此操作的更好方法是使用:


非常感谢。对于输出,问题的格式需要单词翻译,翻译。所以我仍然需要“取消”列表。虽然无需调用
dict.keys()
测试字典中是否存在密钥时,只需使用
if-item in new\u dict:
@mhawke谢谢。我现在改了。(我忘了把它改回去,因为我正在测试这是否是问题所在)。谢谢。对于输出,问题的格式需要单词翻译,翻译。所以我仍然需要“取消”列表。虽然无需调用
dict.keys()
测试字典中是否存在密钥时,只需使用
if-item in new\u dict:
@mhawke谢谢。我现在改了。(我忘了把它改回去,因为我正在测试这是否是问题所在)。也谢谢你的建议。尽管你们两人发布了相同的解决方案,但我只能“批准”一个答案。这表明我还没有掌握python的细节和技巧!叹气没问题,我很高兴我们能帮忙!祝你学习Python好运!也谢谢你的建议。尽管你们两人发布了相同的解决方案,但我只能“批准”一个答案。这表明我还没有掌握python的细节和技巧!叹气没问题,我很高兴我们能帮忙!祝你学习Python好运!非常感谢。我也将研究你的建议。最好是输出不在列表中,即word而不是['word']。有没有办法做到这一点?通过将print(k,'-',v)更改为print(k,'-',',',v)来管理输出。join(v))谢谢。我也将研究你的建议。最好是输出不在列表中,即word而不是['word']。有没有办法做到这一点?通过将print(k,'-',v)更改为print(k,'-','和'。join(v))来管理输出