【问题标题】:Convert dictionary with tuples as keys to tuples that contain keys and value将元组作为键的字典转换为包含键和值的元组
【发布时间】:2019-03-28 13:49:06
【问题描述】:

我有一本这样的字典:

d = {('a','b','c'):4, ('e','f','g'):6}

我想要一组这样的元组:

{('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}

我试过这样:

b = set(zip(d.keys(), d.values()))

但是输出是这样的:

set([(('a', 'b', 'c'), 4), (('e', 'f', 'g'), 6)])

我该如何解决?谢谢!

【问题讨论】:

    标签: python dictionary tuples


    【解决方案1】:

    在 Python >= 3.5 中,您可以在此 set comprehension 中使用 generalized unpacking

    {(*k, v) for k, v in d.items()}
    # {('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}
    

    但更普遍适用的tuple 连接方法如suggested by Aran-Fey 并没有明显更冗长:

    {k + (v,) for k, v in d.items()}
    

    【讨论】:

      【解决方案2】:

      或者试试map:

      print(set(map(lambda k: k[0]+(k[1],),d.items())))
      

      或者(python 3.5 以上):

      print(set(map(lambda k: (*k[0],k[1]),d.items())))
      

      【讨论】:

        【解决方案3】:

        使用集合推导迭代键、值对,然后从分解(解包)的键和值创建新元组:

        >>> {(*k, v) for k, v in d.items()}
        {('e', 'f', 'g', 6), ('a', 'b', 'c', 4)}
        

        【讨论】:

          【解决方案4】:

          你不想用值压缩键,你想连接它们:

          >>> {k + (v,) for k, v in d.items()}
          {('a', 'b', 'c', 4), ('e', 'f', 'g', 6)}
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-12
            • 1970-01-01
            • 1970-01-01
            • 2021-12-09
            • 2021-11-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多