【问题标题】:How to convert this dictionary into a list of tuples?如何将此字典转换为元组列表?
【发布时间】:2014-03-01 09:26:55
【问题描述】:

我有这本词典;

Dict={1: ('John', 129L, 37L), 2: ('James', 231L, 23L)}

我想把它转换成这样的元组列表;

List=[(1, 'John', 129L, 37L), (2, 'James', 231L, 23L)]

我尝试了 Dict.items() 但它没有产生理想的结果但很接近。正确的解决方案是什么?

我正在使用 Python 2.7

【问题讨论】:

    标签: python list python-2.7 dictionary


    【解决方案1】:
    my_dict = {1: ('John', 129L, 37L), 2: ('James', 231L, 23L)} 
    print [(k,) + my_dict[k] for k in my_dict]
    # [(1, 'John', 129L, 37L), (2, 'James', 231L, 23L)]
    

    按键版本排序:

    print [(k,) + my_dict[k] for k in sorted(my_dict)]
    

    说明:

    (k,) + my_dict[k] 正在扩展元组 (k,)(是的,单个项目,带逗号,括号内是一个元组),通过与键 k 对应的值连接起来

    【讨论】:

      【解决方案2】:

      使用list comprehension

      >>> d = {1: ('John', 129L, 37L), 2: ('James', 231L, 23L)}
      >>> [(key,) + value for key, value in d.iteritems()]
      [(1, 'John', 129L, 37L), (2, 'James', 231L, 23L)]
      

      顺便说一句,生成列表中的项目顺序无法保证。因为dict 是无序映射。

      如果您希望结果按键排序,请使用sorted

      >>> [(key,) + value for key, value in sorted(d.iteritems())]
      [(1, 'John', 129L, 37L), (2, 'James', 231L, 23L)]
      

      【讨论】:

      • OP 很可能想要按键排序的列表。
      • 非常感谢!!但是你的反应速度让我觉得很愚蠢:)
      • @user2357112,感谢您的评论。我更新了答案以包含另一个按键对项目进行排序的版本。
      【解决方案3】:

      使用地图:

      map(lambda x: (x,) + Dict[x] , Dict.keys())
      

      输出:

      [(1, 'John', 129L, 37L), (2, 'James', 231L, 23L)]
      

      【讨论】:

      • .keys() 是多余的。
      • @user3 .keys() 必须创建一个列表,因此它也存在性能问题。
      • @thefourtheye,同意。
      猜你喜欢
      • 2020-12-08
      • 1970-01-01
      • 2010-10-15
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      相关资源
      最近更新 更多