如何在 Python 中反转字典(其值是列表)?

新手上路,请多包涵

我想编写一个函数,它接收字典作为输入参数并返回输入字典的反向,其中原始字典的值用作返回字典的键,原始字典的键用作值返回的字典如下所述:

 dict = {'Accurate': ['exact', 'precise'],
        'exact': ['precise'],
        'astute': ['Smart', 'clever'],
        'smart': ['clever', 'bright', 'talented']}

dict = {'precise': ['accurate', 'exact'],
        'clever': ['astute', 'smart'],
        'talented': ['smart'],
        'bright': ['smart'],
        'exact': ['accurate'],
        'smart': ['astute']}

返回字典中的值列表应按升序排序。大小写无关紧要。这意味着所有单词都应转换为小写字母。例如,单词“Accurate”在原始字典中是大写的,但在返回的字典中它是用所有小写字母书写的。

 #My code is:
from collections import defaultdict
def reverse_dictionary(input_dict):
   d = defaultdict(list)
   for v,k in input_dict.items():
       d[k].append(v)
       return d

但它虽然返回此错误:

 Error in evaluating function:
TypeError at line 6
unhashable type: 'list'

原文由 Utsav Maniar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 789
2 个回答

你可以像这样非常简单地做到这一点:

 newdict = {}
for key, value in olddict.items():
    for string in value:
        newdict.setdefault(string, []).append(key)

原文由 zondo 发布,翻译遵循 CC BY-SA 3.0 许可协议

我将从使用默认字典交换键/值开始:

 output_dict = defaultdict(list)
for key, values in input_dict.items():
    for value in values:
        output_dict[value.lower()].append(key.lower())

最后排序:

 for key, values in output_dict.items():
    output_dict[key] = sorted(values)

原文由 DaveBensonPhillips 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题