Python的dict/list排序查找

本文最后更新于2017年10月1日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=Start=

缘由:

整理一下Python中和dict/list相关的排序、查找代码,方便以后查阅和使用。

正文:

参考解答:
Python中对dict的排序
In [1]: A = {'Name1':34, 'Name2': 12, 'Name6': 46}

# 对dict的value进行排序,但是只取key作为结果列表
In [2]: sorted(A, key=A.get)
Out[2]: ['Name2', 'Name1', 'Name6']

# 对dict的value进行排序
In [3]: sorted(A.values())
Out[3]: [12, 34, 46]

# 对dict的value进行排序,并将结果作为list返回
In [5]: sorted(A.items(), key=lambda x:x[1])
Out[5]: [('Name2', 12), ('Name1', 34), ('Name6', 46)]

# 对dict的key进行排序,并将结果作为list返回
In [6]: sorted(A.items(), key=lambda x:x[0])
Out[6]: [('Name1', 34), ('Name2', 12), ('Name6', 46)]

# 对dict的key进行排序,且只取key作为结果列表
In [7]: sorted(A.keys())
Out[7]: ['Name1', 'Name2', 'Name6']
Python中的’too many values to unpack’错误
# Python 2
for field, value in fields.iteritems():
    print field, value

# Since Python 3 iteritems() is no longer supported. Use items() instead.
for field, value in fields.items():
    print(field, value)
Python中查找某个元素在list中的位置/下标
In [17]: %paste
item = "barx"
arr = ["foo", "bar", "baz"]
if item in arr:
    print arr.index(item)
else:
    print '{0} not in {1}'.format(item, arr)

## -- End pasted text --
barx not in ['foo', 'bar', 'baz']

In [18]: %paste
item = "bar"
arr = ["foo", "bar", "baz"]
if item in arr:
    print arr.index(item)
else:
    print '{0} not in {1}'.format(item, arr)

## -- End pasted text --
1

 

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3614.html

3 thoughts on “Python的dict/list排序查找”

  1. Python中对dict的value是list类型的进行排序(根据list的内容、大小)
    https://codereview.stackexchange.com/questions/180005/sort-dictionary-by-increasing-length-of-its-values
    https://stackoverflow.com/questions/613183/how-do-i-sort-a-dictionary-by-value
    `
    # 根据 dict 的 key 大小进行排序
    In [87]: for k in sorted(result.items(), key=lambda x: x[0]):
    …: print k
    …:

    # 根据 dict 的 value 大小进行排序(字符串比较)
    # lambda 后面的 x 指代的是前面参数 result.items() 里面的一个元素,即 (k, v) ,所以 x[1] 指的是 dict 的value
    In [88]: for k in sorted(result.items(), key=lambda x: x[1]):
    …: print k
    …:

    # 当 dict 的 value 是 list 类型时,根据 list 元素的多少进行排序
    # lambda 后面的 x 指代的是前面参数 result.items() 里面的一个元素,即 (k, v) ,所以 x[1] 指的是 dict 的 value ,所以下面语句的含义是比较 value 的 len 大小(字符串比长度,数组比大小)
    In [89]: for k in sorted(result.items(), key=lambda x: len(x[1])):
    …: print k
    …:

    # 当 dict 的 value 是 list 类型时,先根据 list 元素的多少进行排序,再根据 list 进行排序
    # 在 sorted 函数的 key 参数那里的 lambda 是可以进行多级排序的,只要传一个 tuple 过去就行
    In [91]: for k in sorted(result.items(), key=lambda x: (len(x[1]), x[1]), reverse=True):
    …: print k
    …:
    `

  2. Python中如何查找list中出现次数最多的元素
    https://stackoverflow.com/questions/1518522/find-the-most-common-element-in-a-list
    `
    >>> most_common([‘duck’, ‘duck’, ‘goose’])
    ‘duck’
    >>> most_common([‘goose’, ‘duck’, ‘duck’, ‘goose’])
    ‘goose’

    # 方法一
    from itertools import groupby as g
    def most_common_oneliner(L):
    return max(g(sorted(L)), key=lambda(x, v):(len(list(v)),-L.index(x)))[0]

    # 方法二
    def most_common(lst):
    return max(set(lst), key=lst.count)

    #方法三
    from collections import Counter
    def most_common(lst):
    data = Counter(lst)
    return max(lst, key=data.get)
    `

  3. Python中如何确定一个list的模式
    https://stackoverflow.com/questions/10797819/finding-the-mode-of-a-list
    `
    即,给定一个list,调用某个函数返回该list中出现次数最多的元素。
    max(set(list_in), key=list_in.count)

    # Python 2.7及以上版本
    from collections import Counter
    data = Counter(your_list_in_here)
    data.most_common() # Returns all unique items and their counts
    data.most_common(1) # Returns the highest occurring item
    `

hi进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注