for循环列出理解

时间:2018-07-25 11:50:19

标签: python numpy for-loop list-comprehension

我想将此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

1 个答案:

答案 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