【问题标题】:Tuples into a dictionary [duplicate]元组到字典中[重复]
【发布时间】:2015-02-24 11:06:01
【问题描述】:

对于下面的元组列表:

x= [('a',1),('b', 2)]

我想把它转换成:

x_1 = {'a' : 1, 'b': 2}

如果我使用 dict(x),则 dict 变得无序,我希望它以完全相同的顺序排列。 我的课程作业真的需要这个,请快速帮助

【问题讨论】:

    标签: python list dictionary tuples


    【解决方案1】:

    如果必须保留订单,请使用collections.OrderedDict()

    >>> from collections import OrderedDict
    >>> x= [('a',1),('b', 2)]
    >>> x_1 = OrderedDict(x)
    >>> for key in x_1:
    ...     print(key)
    ... 
    a
    b
    

    【讨论】:

    • 在我打印出键和值之前效果很好,程序说,ValueError: too many values to unpack (expected 2) 我使用这个是因为我希望它们在同一行: for key, vlaues in x_1: print(key,values)
    • @PratyushKhurana,x_1.items() 同时返回 keyvalue,对 x_1 的简单迭代仅返回 key。所以请改用for key, values in x_1: print(key,values)
    • @PratyushKhurana:听起来你想迭代 x_1.items() 而不是。
    • @BHATIRSHAD:您实际上忘记在您的示例中包含.items()。 :-P
    • 终于成功了! :D 非常感谢你们的快速回复!很抱歉占用您的时间:p
    【解决方案2】:

    你需要collections.ordereddict

    >>> from collections import OrderedDict
    >>> x= [('a',1),('b', 2)]
    >>> x = OrderedDict(x)
    >>> x
    OrderedDict([('a', 1), ('b', 2)])  # Order is preserved
    

    这看起来不像 python 字典,但实际上可以从下面的示例中看出:

    >>> x['a']  
    1
    >>> x['b']
    2
    >>> for key,val in x.items():
    ...    print(key,val)
    ... 
    a 1
    b 2
    

    【讨论】:

      【解决方案3】:

      根据定义,Python中的字典(或关联数组)是一种无序数据结构,它存储key-value数据并允许用户具有通过给定 key 提取 value 的快速方法,以添加新对 key-value 或删除现有对。这种数据结构必须是无序的,才能使所有必要的算法快速运行。

      有关字典的更多信息,请参阅wikipedia

      如果您确实需要使用键顺序,我建议您分别创建字典和列表或键。它会占用更多内存,但通常会运行得更快。

      x = [('a', 1), ('b', 2)]
      
      dct = dict(x) # dictionary
      kys = zip(*x)[0] # tuple of keys
      

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2020-04-03
        • 2011-07-22
        • 2011-09-25
        • 2021-03-09
        • 2019-03-21
        • 2017-11-05
        • 2017-09-17
        • 1970-01-01
        • 2012-02-20
        相关资源
        最近更新 更多