【问题标题】:Python- How do I compare a key's value in an IF statement in a FOR loop on a list of dictionaries?Python-如何在字典列表的 FOR 循环中比较 IF 语句中的键值?
【发布时间】:2013-01-14 17:54:01
【问题描述】:

出于这个问题的目的,我已将其缩短,但代码如下所示:

total1=0
total2=0
total3=0
score1=20
score2=30
score3=40


players = [{'user': 'Player1', 'total': total1, 'score': score1},
{'user': 'Player2', 'total': total2, 'score': score2},
{'user': 'Player3', 'total': total3, 'score': score3}]

for i in players:
    if players[i]['score'] <= 30:
        ***code goes here***

我得到这个类型错误:列表索引必须是整数,而不是字典

“如果每个玩家得分的值

如果我只写print players[0]['score'],我会得到20。如果我写print players[1]['score'],我会得到30,但为什么我不能把它放在for循环中并让“i”成为数字?

提前致谢!

【问题讨论】:

  • 永远记住这一点:在 Python 中“for”实际上是“foreach”。

标签: python if-statement dictionary for-loop key


【解决方案1】:

列表“玩家”上的第一个"for" iterates,所以每个元素都是字典:

for player in players:
    if player['score'] <= 30:
        ...

【讨论】:

    【解决方案2】:

    当您遍历列表时,每个i 都是列表的一个元素,因此请将players[i] 替换为i

    【讨论】:

      【解决方案3】:

      在这个循环中:

      for i in players:
          if players[i]['score'] <= 30:
              ***code goes here***
      

      i 是从列表返回的字典,而不是列表中的索引。你想要的是:

      for i, player in enumerate(players):
          if player['score'] <= 30:
              ***code goes here***
      

      甚至:

      for player in players:
          if player['score'] <= 30:
              ***code goes here***
      

      如果以后不需要索引

      【讨论】:

        猜你喜欢
        • 2014-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多