【问题标题】:python : list of dictionary values by alphabetical order of keyspython:按字母顺序排列的字典值列表
【发布时间】:2014-04-19 11:07:39
【问题描述】:

有没有一种从字典中获取值列表的简单方法,但所有值都按字典中键的字母顺序排序?

【问题讨论】:

    标签: python list dictionary alphabetical


    【解决方案1】:

    您有多种选择;最简单的方法是对 items 进行排序,通过列表推导挑选出值:

    [v for k, v in sorted(dictionary.iteritems())]
    

    因为元组是按字典顺序排序的;首先是按键,然后是价值。如果您使用的是 Python 3,请将 iteritems() 替换为 items()

    您可以只对键进行排序并将其转换为值:

    [dictionary[k] for k in sorted(dictionary)]
    

    演示:

    >>> dictionary = {'foo': 42, 'bar': 38, 'baz': 20}
    >>> [v for k, v in sorted(dictionary.iteritems())]
    [38, 20, 42]
    >>> [dictionary[k] for k in sorted(dictionary)]
    [38, 20, 42]
    

    事后访问密钥也是更快的选择:

    >>> timeit.timeit('[v for k, v in sorted(dictionary.iteritems())]', 'from __main__ import dictionary')
    3.4159910678863525
    >>> timeit.timeit('[d[key] for key in sorted(d)]', 'from __main__ import dictionary as d')
    1.5645101070404053
    

    是的,对一本小字典进行一百万次排序的速度是其两倍以上。

    【讨论】:

      【解决方案2】:

      有很多方法可以做到这一点。一种方法是在字典上使用sorted

      >>> d = {'c': 1, 'b': 2, 'e': 3, 'a': 4}
      >>> l = [d[key] for key in sorted(d)]
      >>> print(l)
      [4, 2, 1, 3]
      

      【讨论】:

        【解决方案3】:

        是的,为此您可以使用zip。这是一个例子:

        y = {'a': 1, 'd':4, 'h':3, 'b': 2}
        
        a = y.keys()
        b = y.values()
        
        print [d for (c,d) in sorted(zip(a,b))]
        [1, 2, 4, 3]
        

        或者简单地说:

        print [i[1] for i in sorted(y.items())]
        

        您可以在这里试用:http://repl.it/R8e

        【讨论】:

        • 甚至不需要调用.keys()sorted(y) 获取键然后映射到值有什么问题?还是使用sorted(y.items())
        • @MartijnPieters,谢谢,我已经更新了我的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 2018-09-15
        相关资源
        最近更新 更多