如何将字典列表拆分为2个独立的字典列表,并进行相等检查



我目前正在开发一个网站,该网站将检测用户游戏和时间。在我的Web应用程序中,用户可以将游戏设置为已完成(已玩(。我成功地创建了一个字典列表和一个玩到最后的游戏。我认为一些代码说明会有所帮助。

这是我的代码,应该生成两个单独的字典列表。 played_games_entries确实有效。 我尝试使用其他方法,但它没有按我的预期工作。我知道这个问题,但很难解释,我现在不知道我的方法应该是什么。老实说,我有点困惑,因为 if 语句有效,而 else 语句无效。

def get_name_and_due(request, played_games, games_list):
open_games_entries = []
played_games_entries = []
for game in games_list:
for played_game in played_games:
due_perc = convert_due_into_percentage(game['due'], request.session.get('max_due'))
if game['game_name'] == played_game['played_game_name']:
played_games_entries.append({'name': game['game_name'], 'due': due_perc})
break
else:
pass

以下是参数played_games和game_list的值。

games_list = [
{'index': '1', 'game_name': 'Temtem', 'due': '00:30:04'},
{'index': '2', 'game_name': 'The Forest', 'due': '10:00:30'},
{'index': '3', 'game_name': 'The Witcher 3: Wild Hunt', 'due': '50:15:25'},
{'index': '4', 'game_name': 'STAR WARS Jedi: Fallen Order', 'due': '18:15:00'}
]
played_games = [
{'played_game_name': 'Grand Theft Auto: San Andreas'},
{'played_game_name': 'The Witcher 3: Wild Hunt'},
{'played_game_name': 'ONE PIECE: PIRATE WARRIORS 4'}
]

最后一个代码将是预期的结果。并指出played_game_entries确实有效

open_games_entries = [
{'index': '1', 'game_name': 'Temtem', 'due': '24.44'},
{'index': '2', 'game_name': 'The Forest', 'due': '10'},
{'index': '4', 'game_name': 'STAR WARS Jedi: Fallen Order', 'due': '20'}
]
played_games_entries = [
{'index': '3', 'game_name': 'The Witcher 3: Wild Hunt', 'due': '100'}
]

我整天都在努力自己修复它,但我失败了。我在互联网和SO上查找问题,许多人建议设置。但是没有考虑这种方法,因为它基于列表,而我有一个字典列表。我真的很想看到一种带有for循环的方法,因为我真的认为这是可能的。

此致敬意

琳 达

您可以使用else作为for的一部分(当for循环结束时没有中断,代码执行继续(:

...
for played_game in played_games:
...
else:
open_games_entries.append(...

在您的代码中:

for game in games_list:
for played_game in played_games:
due_perc = convert_due_into_percentage(game['due'], request.session.get('max_due'))
if game['game_name'] == played_game['played_game_name']:
played_games_entries.append({'index': game['index'], 'game_name': game['game_name'], 'due': due_perc})
break
else:
open_games_entries.append({'index': game['index'], 'game_name': game['game_name'], 'due': due_perc})

最新更新