【问题标题】:Python turning a tuple into a dictPython将元组变成字典
【发布时间】:2016-06-03 12:50:03
【问题描述】:

我已经搜索过,但找不到任何有用的东西...我希望有人可以帮助我。

我正在尝试获取一个元组并将其更改为有序字典:

mylist = [(5, 3), (1, 4), (1, 7), (12, 7), (8, 3), (12, 4), (12, 5)]

并将其更改为:

myorderedlist = [(1, 7), (1, 4), (5, 3), (8, 3), (12, 7), (12, 5), (12, 4)]

然后(我也需要它来摆脱较小的值):

mydic = {1:7, 5:3, 8:3, 12:7}

总的来说,我试图让mylist = [(5, 3), (1, 4), (1, 7), (12, 7), (8, 3), (12, 4), (12, 5)] 进入mydic = {1:7, 5:3, 8:3, 12:7}

附言。如果你认为你知道一些可以帮助我的东西,请把它作为答案。

【问题讨论】:

    标签: python dictionary tuples


    【解决方案1】:

    您可以先对列表进行排序。这将根据每个项目的(x, y) 值重新排列列表。具有相同x 值的项目将按其y 值排序。

    然后您可以将其转换为OrderedDict 并毫无痛苦地保持排序顺序。

    from collections import OrderedDict
    
    mylist = [(5, 3), (1, 4), (1, 7), (12, 7), (8, 3), (12, 4), (12, 5)]
    mylist.sort()
    print mylist
    
    mydict = OrderedDict()
    mydict.update(mylist)
    print mydict
    

    输出:

    [(1, 4), (1, 7), (5, 3), (8, 3), (12, 4), (12, 5), (12, 7)]
    OrderedDict([(1, 7), (5, 3), (8, 3), (12, 7)])
    

    【讨论】:

    • print dd 是做什么的? @Rikka
    • 对不起,应该是 print mydict
    【解决方案2】:

    这也有效。

    In [1]: a = [(5, 3), (1, 4), (1, 7), (12, 7), (8, 3), (12, 4), (12, 5)]
    
    In [2]: dict(sorted(a, key=lambda x: (x[0], x[1])))
    Out[2]: {1: 7, 5: 3, 8: 3, 12: 7}
    

    【讨论】:

    • lambda 键是不必要的。默认排序方法的作用完全相同。
    • key=lambda 究竟做了什么?
    【解决方案3】:

    试试这样的

    >>> mylist = [(5, 3), (1, 4), (1, 7), (12, 7), (8, 3), (12, 4), (12, 5)]
    >>> smaller = 2 # for example
    >>> mydic = {k:v for k,v in mylist if v > smaller}
    >>> mydic
    {8: 3, 1: 7, 12: 5, 5: 3}
    >>>
    

    注意,如果一个键在元组中重复,前一个键将被替换。

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 2013-09-08
      • 2020-01-02
      • 2019-11-24
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 2020-09-21
      相关资源
      最近更新 更多