【问题标题】:How to split a List of Dictionary into 2 seperates list of dictionaries with equality check如何通过相等检查将字典列表拆分为 2 个单独的字典列表
【发布时间】:2020-01-31 21:45:15
【问题描述】:

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

这是我的代码,它应该生成两个单独的字典列表。 play_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'}
]

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

最好的问候

琳达

【问题讨论】:

  • 您实际上是想查看两个词典的共同点吗?然后将其拆分为另外两个: 1 有什么共同点,而 2 有什么相反的?

标签: python django list for-loop if-statement


【解决方案1】:

您可以将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})

【讨论】:

  • 你救了我老师。我不知道您可以将 else 排成一行。我认为每一个 if 都需要一个 else。我会查找更多研究这种方法的工作原理
猜你喜欢
  • 2021-09-09
  • 2020-02-08
  • 1970-01-01
  • 2010-12-19
  • 2011-05-04
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多