dict1和dict2的嵌套字典,使用dict1的键和dict2的值(dict1中的键)

2024-06-17 15:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

users = {'196': ('110', '1'), '186': ('269', '1'), '22': ('68', '4'), '196': ('650', '3')}
movies = {'110': 'Operation Dumbo Drop (1995)', '186': 'Blues Brothers, The (1980)',  '269': 'Full Monty, The (1997)', '68': 'Crow, The (1994)', '650': 'Seventh Seal, The (Sjunde inseglet, Det) (1957)'}

我的代码创建了一个嵌套字典,其中的键是唯一的用户列表(来自用户的键),但使用来自电影的键替换电影ID的值(来自用户的值列表的第一项)并保留分数(来自用户的值列表的第二项)是:

users_preference = {k: list(set().union((*map(lambda x: [x for x in movies.values()], v[0])) )) for k, v in users.items() }

但这会返回每个用户的所有电影,我不知道如何添加分数。你能帮忙吗?非常感谢。你知道吗

预期输出类似于:

users_preference = {'196': {'Operation Dumbo Drop (1995)': '1', 'Seventh Seal, The (Sjunde inseglet, Det) (1957)': '3'}

Tags: the用户列表电影moviesoperationusers分数
3条回答
Dct3 = {k:(movies[v[0]],v[1]) for k, v in users.items()}

保持简单,您可以使用键从movies dict访问值。 把它看作是为用户中的每个键创建一个新的元组作为值。你知道吗

更冗长

Dct3 = {}
for k, v in users.items():
  v = list(v)
  v[0] = movies[v[0]]
  Dct3[k] = v

print (Dct3)
#=> {'196': ['Seventh Seal, The (Sjunde inseglet, Det) (1957)', '3'], '186': ['Full Monty, The (1997)', '1'], '22': ['Crow, The (1994)', '4']}

使用users格式无法获得预期的输出,我建议您更改为字典,其中值是元组列表:

users = {'196': [('110', '1'), ('650', '3')], '186': [('269', '1')], '22': [('68', '4')]}
movies = {'110': 'Operation Dumbo Drop (1995)', '186': 'Blues Brothers, The (1980)', '269': 'Full Monty, The (1997)',
          '68': 'Crow, The (1994)', '650': 'Seventh Seal, The (Sjunde inseglet, Det) (1957)'}

user_preference = {user: {movies.get(movie, movie): rank for movie, rank in preferences} for user, preferences in
                   users.items()}

print(user_preference)

输出

{'196': {'Operation Dumbo Drop (1995)': '1', 'Seventh Seal, The (Sjunde inseglet, Det) (1957)': '3'}, '22': {'Crow, The (1994)': '4'}, '186': {'Full Monty, The (1997)': '1'}}

相关问题 更多 >