如何使用字典列表作为字典列表的值创建字典

时间:2020-10-15 19:19:05

标签: python

我有这个字典示例列表:

Object.fromEntries

列表中的某些词典包含评分,而其他词典则不包含。我想生成一个新字典,像下面的字典一样,按评分排序:

const arrStr = ['a', 'b', 'c', 'd', 'e', 'f'];
const finalObj = Object.fromEntries(
  arrStr.map(key => [
    key,
    {
      vhCal: [],
      vhRef: [],
      vhOcup: [],
      vhIlu: [],
      vhAcs: []
    }
  ])
);

finalObj.a.vhCal.push('foo');
console.log(finalObj);

这是我的示例代码:

[
  {
    "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/"
    ]
  }, .......
]

我被困住了,无法继续,非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

似乎是您想要的:

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关键字来检查电影是否具有评级。

答案 1 :(得分:1)

您可以使用此示例将其集成到您的代码中:

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'}]}