【问题标题】:Inconsistency when I'm mapping lists into a dictionary using dict and zip - Python当我使用 dict 和 zip 将列表映射到字典时出现不一致 - Python
【发布时间】:2011-08-20 20:42:16
【问题描述】:

我试过这个例子,效果很好:Map two lists into a dictionary in Python

但是如果我用这个列表替换了“keys”: ['2','3','2','3','4','2','4','2','2','3','2','3',' 4']

和这个列表的“值”: [2、3、4、5、6、4、2、1、1、2、3、4、5]

dict 类试图单独制作一个包含“值”部分的字典!

输出: {'3': 4, '2': 3, '4': 5}

自己尝试一下,你应该会得到相同的答案。一个为什么和一个替代方案会很棒。

【问题讨论】:

  • 键 '2'、'3'、'4' 的最后一个值是列表中的最后 3 个值 - 3、4、5。这是你的输出有什么......问题 ?你期待什么输出?

标签: python list dictionary


【解决方案1】:

您的键列表具有重复值,因此会覆盖先前重复键中的值。

>>> keys = ['2', '3', '2-1', '3-1', '4', '2-2', '4-1', '2-3', '2-4', '3-2', '2-5', '3-3', '4-2']
>>> values = [2, 3, 4, 5, 6, 4, 2, 1, 1, 2, 3, 4, 5]
>>> dict(zip(keys, values))
{'2-2': 4, '4-1': 2, '4-2': 5, '2-1': 4, '2-4': 1, '2-3': 1, '2-5': 3, '3-3': 4, '3-2': 2, '3-1': 5, '3': 3, '2': 2, '4': 6}

另外,你可以使用整数键作为字典,所以不需要'2',你可以使用2

【讨论】:

    【解决方案2】:

    dict 要求没有重复的键,但是在您的键列表中,您有很多重复项,因此 dict 将合并它们。如果您想拥有多个键,可以使用 multidict 实现来实现:

    >>> a =  ['2', '3', '2', '3', '4', '2', '4', '2', '2', '3', '2', '3', '4']
    >>> b =  [2, 3, 4, 5, 6, 4, 2, 1, 1, 2, 3, 4, 5]
    >>> dict(zip(a, b))
    {'3': 4, '2': 3, '4': 5}
    >>> multidict.MultiDict(zip(a, b))
    MultiDict([('2', 2), ('3', 3), ('2', 4), ('3', 5), ('4', 6), ('2', 4), ('4', 2),
     ('2', 1), ('2', 1), ('3', 2), ('2', 3), ('3', 4), ('4', 5)])
    

    注意:我使用了paste.util.multidict.MultiDict,由pip install paste 安装。

    【讨论】:

    • 谢谢,这正是我想要的。我认为我对其他回答者不公平,因为我应该指定我希望一个键指向很多值。
    【解决方案3】:

    字典是一个哈希,这意味着每个键只能存在一次。

    >>> a =  ['2', '3', '2', '3', '4', '2', '4', '2', '2', '3', '2', '3', '4']
    >>> b =  [2,    3,   4,   5,   6,   4,   2,   1,   1,   2,   3,   4,   5 ]
    >>> c = zip(a, b)
    >>> c
    [('2', 2), ('3', 3), ('2', 4), ('3', 5), ('4', 6), ('2', 4), ('4', 2), ('2', 1), ('2', 1), ('3', 2), ('2', 3), ('3', 4), ('4', 5)]
    >>> dict(c)
    {'3': 4, '2': 3, '4': 5}
    

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 1970-01-01
      • 2018-08-13
      • 2016-08-31
      • 2010-12-31
      • 2020-03-15
      • 2020-06-07
      • 1970-01-01
      • 2020-08-15
      相关资源
      最近更新 更多