簡體   English   中英

如何使用字典列表作為字典列表中的值創建字典

[英]how to create a dictionary with list of dictionaries as values from a list of dictionaries

我有這個字典示例列表:

[
  {
    "name": "like father", 
    "director": "Ajun kun", 
    "edited": "2014-12-20T21:23:49.867000Z", 
    "similar_movies": [
      "http://movies.dev/api/films/1/", 
      "http://movies.dev/api/films/3/", 
   
    ], 
    "rating": "2.0", 

  }, 
  {
    "name": "be like her", 
    "director": tuned ku", 
    "edited": "2014-12-20T21:23:49.870000Z", 
    "similar_movies": [
      "http://movies.dev/api/films/1/"
    ]
  }, .......
]

列表中的某些詞典包含評級,而其他詞典則不包含。 我想生成一個像下面按評分排序的字典的新字典:

    {
        "movies":[
            {"name": "movie_4", "rating" : 0.1},
            {"name": "movie_1", "rating" : 0.3},
            {"name": "movies_5", "rating" : 0.5}
        ],
        "movies_without_rating": [
            {"name": "movie_8"},
            {"name": "movie_3"} 
        ]
    }

這是我的示例代碼:

from flask import Flask,  jsonify, request
import requests
from collections import ChainMap

app = Flask(__name__)

@app.route('/movies', methods=['GET'])
def returnAll():
     #note: the URL is just a demo url
    response = requests.get("https://movies.dev/api/movies/")

    results = response.json()['results']

    general_dic = {}


  
    for result in result:
        for key, val in result:
            if (key == 'rating'):
                general_dic['movies'] 
             else:
                 general_dic['movies_with_rating']
    
    return general_dic

    
    return jsonify(results)





if __name__ == "__main__":
    app.run(debug=True)

我被卡住了,無法繼續,非常感謝您的幫助。

看起來像這樣的東西就是你想要的:

def separate_movies(movies_list):
    movies_with_rating = []
    movies_without_rating = []
    
    for movie in movies_list:
        name = movie["movies"]
        if "rating" in movie:
            movies_with_rating.append({
                "name": name,
                "rating": movie["rating"]
            })
        else:
            movies_without_rating.append({
                "name": name
            })
    
    movies_with_rating.sort(key = lambda movie: movie["rating"])

    return {
        "movies": movies_with_rating,
        "movies_without_rating": movies_without_rating
    }

這里的關鍵是使用in關鍵字來檢查電影是否有評級。

您可以使用此示例集成到您的代碼中:

lst = [
  {
    "movies": "like father", 
    "rating": "2.0", 
  }, 
  {
    "movies": "other  movie", 
    "rating": "2.5", 
  }, 
  {
    "movies": "be like her", 
  }, 
  {
    "movies": "other  movie 2", 
    "rating": "5.5", 
  }, 
  {
    "movies": "other  movie 3", 
  }, 
]

out = {'movies':[], 'movies_without_rating':[]}
for movie in lst:
    if 'rating' in movie:
        out['movies'].append({'name': movie['movies'], 'rating': float(movie['rating'])})
    else:
        out['movies_without_rating'].append({'name': movie['movies']})

# sort it
out['movies'] = sorted(out['movies'], key=lambda k: k['rating'])


# pretty print on screen:
from pprint import pprint
pprint(out)

印刷:

{'movies': [{'name': 'like father', 'rating': 2.0},
            {'name': 'other  movie', 'rating': 2.5},
            {'name': 'other  movie 2', 'rating': 5.5}],
 'movies_without_rating': [{'name': 'be like her'}, {'name': 'other  movie 3'}]}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM