【问题标题】:Creating tuple pairs from a dictionary that has a list as value从具有列表作为值的字典创建元组对
【发布时间】:2016-06-20 13:06:07
【问题描述】:

我正在尝试从具有列表作为值的字典中获取元组对列表。

d={ 'a': [1,2], 'b': [4,5], 'c': [7,8] }
print(d.items())
>>[('a', [1, 2]), ('b', [4, 5]),('c', [7, 8]) ]

我如何获得这种形式的列表

[('a', 1),('a', 2), ('b',4),('b',5),('c',7),('c',8)]

【问题讨论】:

标签: python dictionary


【解决方案1】:

很简单,使用单线:)

>>>
>>> d={ 'a': [1,2], 'b': [4,5], 'c': [7,8] }
>>> [(key,item) for item in value for  key, value in d.iteritems()]
[('a', 4), ('c', 4), ('b', 4), ('a', 5), ('c', 5), ('b', 5)]
>>>

如果你想排序使用内置功能

>>> d={ 'a': [1,2], 'b': [4,5], 'c': [7,8] }
>>> sorted([(key,item) for item in value for  key, value in d.iteritems()])
[('a', 4), ('a', 5), ('b', 4), ('b', 5), ('c', 4), ('c', 5)]
>>>

【讨论】:

    【解决方案2】:
    >>> d = {'a': [1, 2], 'b': [4, 5], 'c': [7, 8]}
    

    您可以使用dict.items() 访问键值对。

    >>> list(d.items())
    [('a', [1, 2]), ('c', [7, 8]), ('b', [4, 5])]
    

    然后您可以遍历对并遍历列表值:

    >>> [(key, value) for (key, values) in d.items()
    ...  for value in values]
    [('a', 1), ('a', 2), ('c', 7), ('c', 8), ('b', 4), ('b', 5)]
    

    字典键不按字母顺序排列。如果您想要问题中的确切输出,则需要在创建列表之前或之后对它们进行排序:

    >>> pairs = _
    >>> sorted(pairs)
    [('a', 1), ('a', 2), ('b', 4), ('b', 5), ('c', 7), ('c', 8)]
    

    【讨论】:

      【解决方案3】:

      使用简单的列表推导:

      d = {'a': [1,2,3], 'b': [4,5,6]}
      l = [(k, v) for k in d for v in d[k]]
      print(l)  # => [('a', 1), ('a', 2), ('a', 3), ('b', 4), ('b', 5), ('b', 6)]
      

      可能还有其他方法可以做到这一点,但这很简单,不需要其他库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 2018-10-20
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 2022-01-24
        相关资源
        最近更新 更多