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:用户中的k,v的列表(set()。union((* map(lambda x:[x代表movie中的x.values()],v [0]))))))))。 items()}
但是这将返回每个用户的所有电影,而且我不知道如何为此添加分数。能否请你帮忙?谢谢。
预期输出类似于:
users_preference = {'196': {'Operation Dumbo Drop (1995)': '1', 'Seventh Seal, The (Sjunde inseglet, Det) (1957)': '3'}
答案 0 :(得分:1)
Dct3 = {k:(movies[v[0]],v[1]) for k, v in users.items()}
保持简单,您可以使用键来访问电影词典中的值。 只需将其视为为用户中每个键的值创建一个新的元组即可。
答案 1 :(得分:1)
更详细
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']}
答案 2 :(得分:0)
您可以发布
{user:(movies[movie_id], score) for user, (movie_id, score) in users.items()}
产生
{'186': ('Full Monty, The (1997)', '1'),
'196': ('Seventh Seal, The (Sjunde inseglet, Det) (1957)', '3'),
'22': ('Crow, The (1994)', '4')}
请注意,字典users
('196'
)中有重复的密钥。 (由Daniel Mesejo在评论中指出。)字典键必须是唯一的,因此users
实际上看起来像这样:
>>> users
>>> {'186': ('269', '1'), '196': ('650', '3'), '22': ('68', '4')}
〜编辑〜
同样的传统for
循环。
result = {}
for user, (movie_id, score) in users.items():
result[user] = (movies[movie_id], score)
答案 3 :(得分:0)
使用PS> $val = [pscustomobject] @{ one = 'uno'; two = 2 } | ForEach-Object {
$_.one + '!' | Add-Member -PassThru two $_.two
}; $val; $val.two
uno!
2
的格式无法获得预期的输出,我建议您更改为值是元组列表的字典:
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)