【问题标题】:Dictionary changing many values to many keys字典将许多值更改为许多键
【发布时间】:2011-12-15 06:54:46
【问题描述】:

我只是想知道在 Python 的美妙世界中是否有任何方法可以从这样的事情中走出来:

dict1 = {'a': [1,2,3], 'b': [4,5,6]}

dict2 = {'a':1, 'a':2, 'a':3,'b':4, 'b': 5, 'b': 6]

或等价物,顺序无关紧要,但我需要某种方式将 dict1 分解成某种东西,在其中我可以将数值分配给新列表的索引,并将键作为这些索引的实际值,例如dict1 会变成:

[0, a, a, a, b, b, b] 

任何帮助都将不胜感激,尽管答案越白痴越好。

再次感谢你。

【问题讨论】:

    标签: python dictionary key


    【解决方案1】:

    您的dict2 毫无意义,因为字典键必须是唯一的。

    我很确定您可以通过迭代 dict1.items() 来获得您想要的结果,但我需要进一步说明预期输出列表的外观......在您的示例中,ab 是未定义的并且我不知道开头的0 代表什么。

    也许你想要这样的东西?

    dict2 = {}
    for k,v in dict1.items():
      for x in v:
        dict2[x] = k
    

    这会给你一个dict2,比如{1: 'a', 2: 'a', 3: 'a', 4: 'b', 5: 'b', 6: 'b'}。请注意,dict1 的解压缩值中的重复条目可能会被此循环覆盖。


    只是为了大便和咯咯笑,1行中的内容与难以理解的dict理解相同:

    {x: k for (k,v) in dict1.items() for x in v}

    【讨论】:

    • 这就是我所担心的,你知道无论如何从 dict1 到最后的列表而不做中间步骤吗?
    • 是的,你可以遍历dict1.items()..我会更新我的答案
    • 为了澄清列表中的项目将是所有包含一个单词的字符串,我也只包括了 0,因为我从 1 开始编号 dict1 而不是像白痴一样的 0。
    • 不敢相信我以前从未尝试过自己进行 dict 理解。我今天学到了新东西,非常感谢! :o
    • 我不认为有人能很快告诉我如何找到这样的最大值? [[1, 2, 3], [6, 7, 0], [3, 4, 5]] 我一直在尝试将这些项目附加到新列表中,但它不起作用:(
    【解决方案2】:

    如果值表示索引,则:

    import itertools
    
    dict1 = {'a': [1,2,3], 'b': [4,5,6]}
    
    L = [None]*(max(itertools.chain(*dict1.values())) + 1)
    for word, indexes in dict1.items():                          
        for i in indexes:                                     
            L[i] = word
    print(L)
    # -> [None, 'a', 'a', 'a', 'b', 'b', 'b']
    

    【讨论】:

      猜你喜欢
      • 2017-02-05
      • 2016-08-10
      • 2018-11-27
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 2021-11-26
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多