Python:如何查询对象列表?

90a*_*yss 1 python dictionary list

假设我有这个对象列表:

listt = [{
      "CustomerId": "1",
      "Date": "2017-02-02",
      "Content": "AAAAAAAA",
      "Type": 2
    },
    {
      "CustomerId": "2",
      "Date": "2017-02-03",
      "Content": "BBBBBBBB",
      "Type": 1
    },
    {
      "CustomerId": "3",
      "Date": "2017-02-01",
      "Content": "CCCCCCCCC",
      "Type": 1
    },
    {
      "CustomerId": "4",
      "Date": "2017-02-12",
      "Content": "DDDDDDDDDD",
      "Type": 2
    }, ]
Run Code Online (Sandbox Code Playgroud)

找到答案的最简洁方法是什么?

  1. Type = 1的最小日期.

=> 2017-02-1

  1. 选择Type = 2和Date =的内容=(Type = 2的所有对象中的最小日期)

=> AAAAAAAA

我正在阅读有关利用lambda和过滤器的内容,但我无法取得任何进展.有人可以帮忙吗?

jua*_*aga 7

这些是基本的Python数据结构.而不是mapfilter我会建议使用内涵.例如:

>>> listt = [{
...       "CustomerId": "1",
...       "Date": "2017-02-02",
...       "Content": "AAAAAAAA",
...       "Type": 2
...     },
...     {
...       "CustomerId": "2",
...       "Date": "2017-02-03",
...       "Content": "BBBBBBBB",
...       "Type": 1
...     },
...     {
...       "CustomerId": "3",
...       "Date": "2017-02-01",
...       "Content": "CCCCCCCCC",
...       "Type": 1
...     },
...     {
...       "CustomerId": "4",
...       "Date": "2017-02-12",
...       "Content": "DDDDDDDDDD",
...       "Type": 2
...     }, ]
>>> min(d['Date'] for d in listt if d['Type'] == 1)
'2017-02-01'
>>>
Run Code Online (Sandbox Code Playgroud)

或者,为您第二次查询:

>>> min_date = min(d['Date'] for d in listt if d['Type'] == 2)
>>> [d['Content'] for d in listt if d['Date'] == min_date]
['AAAAAAAA']
>>>
Run Code Online (Sandbox Code Playgroud)

试图坚持理解结构使事物更易读,IMO,而不是使用lambda,虽然,它也有它的位置,而且是一个风格的问题.然而,列表内涵是一般的快比同等map使用lambda.但是,map内置函数可以更快.