使用列表值反转字典 [英] Inverting a dictionary with list values

查看:28
本文介绍了使用列表值反转字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我将此索引作为字典.

So, I have this index as a dict.

index = {'Testfil2.txt': ['nisse', 'hue', 'abe', 'pind'], 'Testfil1.txt': ['hue', 'abe', 
'tosse', 'svend']}

我需要反转索引,这样它就会是一个字典,将重复的值合并到一个键中,将 2 个原始键作为值,如下所示:

I need to invert the index so it will be a dict with duplicates of values merged into one key with the 2 original keys as values, like this:

inverse = {'nisse' : ['Testfil2.txt'], 'hue' : ['Testfil2.txt', 'Testfil1.txt'], 
           'abe' : ['Testfil2.txt', 'Testfil1.txt'], 'pind' : ['Testfil2.txt'], 
           'tosse' : ['Testfil1.txt'], 'svend' : ['Testfil1.txt']

是的,上面是我手写的.

Yes, I typed the above by hand.

我的教科书有这个功能来反转字典:

My textbook has this function for inverting dictionaries:

def invert_dict(d): 
    inverse = dict() 
    for key in d: 
        val = d[key] 
        if val not in inverse: 
            inverse[val] = [key] 
        else: 
            inverse[val].append(key) 
    return inverse

它适用于简单的键值对

但是,当我使用具有列表作为值(例如我的 index)的 dict 尝试该函数时,我收到此错误消息:

BUT, when I try that function with a dict that has lists as values such as my index I get this error message:

invert_dict(index)

Traceback (most recent call last):
    File "<pyshell#153>", line 1, in <module>
invert_dict(index)
    File "<pyshell#150>", line 5, in invert_dict
if val not in inverse:
TypeError: unhashable type: 'list'

我已经搜索了一个小时来寻找解决方案,这本书没有帮助,我怀疑我可以以某种方式使用元组,但我不确定如何使用.有什么帮助吗?

I have searched for an hour looking for a solution, the book is no help, and I suspect that I can use tuples in some way, but I am not sure how. Any help?

推荐答案

我已经试过了,你想使用 val not inverse 但是如果list is在字典中".(val 是一个列表)

I've tried around and you want to use val not in inverse but it can't be checked if a "list is in a dict". (val is a list)

对于您的代码,一个简单的更改即可满足您的需求:

For your code a simple change will do what you want:

def invert_dict(d): 
    inverse = dict() 
    for key in d: 
        # Go through the list that is saved in the dict:
        for item in d[key]:
            # Check if in the inverted dict the key exists
            if item not in inverse: 
                # If not create a new list
                inverse[item] = [key] 
            else: 
                inverse[item].append(key) 
    return inverse

这篇关于使用列表值反转字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆