我想将此for循环转换为列表理解
people_metrics = []
for idx, user_id in tqdm(enumerate(list(interactions_test_indexed_df.index.unique().values))):
anime_user_metrics = evaluate_model_for_anime_watcher(model, user_id)
anime_user_metrics['_user_id'] = user_id
people_metrics.append(anime_user_metrics)
print('%d users processed' % idx)
枚举看起来像
idx user_id
0 20
1 32
...etc
我尝试过:
anime_user_metrics = [evaluate_model_for_anime_watcher(model, user_id) for idx, user_id in tqdm(np.ndenumerate(list(interactions_test_indexed_df.index.unique().values)))]
它起作用。 然后我尝试了:
anime_user_metrics['_user_id'] = list(zip(*enumerate(interactions_test_indexed_df.index.unique().values)))[::-1]
或
user_proxy = [b for a, b in np.ndenumerate(list(interactions_test_indexed_df.index.unique().values))]
anime_user_metrics['_user_id'] = user_proxy
但是当我尝试执行第二行时,出现错误TypeError: list indices must be integers, not str
答案 0 :(得分:1)
我不一定推荐这样做,因为它可能很难阅读,但是一种方法是使用**
的dict拆包
v = tqdm(enumerate(list(interactions_test_indexed_df.index.unique().values)))
people_metrics = [
{**evaluate_model_for_anime_watcher(model, user_id), '_user_id': user_id}
for idx, user_id in v
]
在这种情况下,for循环可能会更好
是的,在尝试中,您定义了一个列表anime_user_metrics
(之所以成为列表,是因为理解内容被[]
包围),然后尝试通过使用字符串索引来访问其值。列出带有整数的索引。因此list indices must be integers, not str