【问题标题】:Attempt to invert a dictionary尝试反转字典
【发布时间】:2019-11-08 19:31:10
【问题描述】:

我正在尝试反转以下形式的初始字典:

Dict[str, list[str]] -> Dict[str,list[str]]

Example: INPUT: number_to_letter = {'1': ['A'], '2': ['B'], '3': ['B', 'D']}

OUTPUT expected: letter_to_number = {'A': ['1'], 'B': ['2', '3'], 'D': ['3']}

代码:

inverted = {}

for old_key in key_to_value:
    new_key = key_to_value[old_key]

    if not (new_key in inverted):
        inverted[new_key] = [old_key]
    #o/w append old_key to existing list
    else:
        inverted[new_key].append(old_key)

结果:

Expected = Dict[str,list[str]]

Error received: TypeError: unhashable type: 'list'

【问题讨论】:

标签: python python-3.x dictionary


【解决方案1】:

无论您当前在何处尝试使用 new_key 作为字典键,请尝试改用 tuple(new_key)tuple 是可散列的,因此可以用作字典键,而 list 不是也不能。

【讨论】:

    【解决方案2】:

    如果没有一个很好的输入和输出示例,就很难说出您想要做什么。您的问题的一种解释可能是:

    key_to_value = {'2': ['A', 'B', 'C'], '3': ['B', 'C', 'D'], '4': ['C', 'D', 'E']}
    
    inverted = {}
    
    for old_key in key_to_value:
        new_keys = key_to_value[old_key]
    
        for new_key in new_keys:
            if new_key in inverted:
                inverted[new_key].append(old_key)
            else:
                inverted[new_key] = [old_key]
    
    print(inverted)
    

    输出

    % python3 test.py
    {'A': ['2'], 'B': ['2', '3'], 'C': ['2', '3', '4'], 'D': ['3', '4'], 'E': ['4']}
    %
    

    【讨论】:

    • 嗨,请参阅所做的编辑。我已经包含了一个输入和输出的例子。谢谢。
    • 谢谢!抱歉,起初我没有看到您的示例输出。这是有道理的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多