Python字典理解过滤

4 python dictionary list-comprehension list python-3.x

我有一个词典列表,例如:

movies = [
{
"name": "The Help",
"imdb": 8.0,
"category": "Drama"
},
{
"name": "The Choice",
"imdb": 6.2,
"category": "Romance"
},
{
"name": "Colonia",
"imdb": 7.4,
"category": "Romance"
},
{
"name": "Love",
"imdb": 6.0,
"category": "Romance"
},
{
"name": "Bride Wars",
"imdb": 5.4,
"category": "Romance"
},
{
"name": "AlphaJet",
"imdb": 3.2,
"category": "War"
},
{
"name": "Ringing Crime",
"imdb": 4.0,
"category": "Crime"
}
]
Run Code Online (Sandbox Code Playgroud)

我想通过IMDB> 5.5过滤它们:

我试试这段代码:

 [ { k:v for (k,v) in i.items() if i.get("imdb") > 5.5 } for i in movies]
Run Code Online (Sandbox Code Playgroud)

和输出:

[{'name': 'The Help', 'imdb': 8.0, 'category': 'Drama'},
 {'name': 'The Choice', 'imdb': 6.2, 'category': 'Romance'},
 {'name': 'Colonia', 'imdb': 7.4, 'category': 'Romance'},
 {'name': 'Love', 'imdb': 6.0, 'category': 'Romance'},
 {},
 {},
 {}]
Run Code Online (Sandbox Code Playgroud)

当IMDB低于5.5时,它返回一个空字典.有任何想法吗?谢谢!

jpp*_*jpp 13

不需要字典理解来过滤字典列表.

您可以使用基于字典值的条件的列表推导:

res = [d for d in movies if d['imdb'] > 5.5]
Run Code Online (Sandbox Code Playgroud)

编写代码的方式,字典理解会产生一个空字典i['imdb'] <= 5.5.