将值添加到现有密钥而不覆盖

时间:2017-11-02 10:10:36

标签: 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:
            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 =苹果和惩罚在我上面的努力中出现了'applepunishment'。我知道连接是错误的,但它是我最接近的。我不能使用append或者它会给出错误。我很感激你的建议。我试图以自己的满意度完成snakify课程,这是最后一个问题。

3 个答案:

答案 0 :(得分:2)

您无法使用追加,因为它仅适用于列表。但是在你的新词典中,键总是字符串,所以当你写 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)

现在我们将new_dict值始终声明为列表,您可以使用append。

答案 1 :(得分:2)

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

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)

答案 2 :(得分:2)

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

您可以使用默认值if的{​​{1}}来避免dict.get()语句中的词典查找,如下所示:

[]

或者,执行此操作的更好方法是使用defaultdict

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])