【问题标题】:Dictionary does not add new entries字典不添加新条目
【发布时间】:2020-05-04 01:09:26
【问题描述】:

从字符串元组,创建字典并添加索引(键)和字符串长度(值)的函数。 但是,for 循环只添加了某些条目(在本例中为索引 0 和 2)并且无法找出原因。

代码:

def check_horse_winner(tup):
    results=dict()
    for i in tup:
        results[tup.index(i)]=len(i)
    return results
print(check_horse_winner(("HORSE", "HORSE", "HORS", "HORSE")))

输出:

{0: 5, 2: 4}

【问题讨论】:

    标签: python python-3.x dictionary for-loop


    【解决方案1】:

    字典是唯一键到值的映射

    您在 dict 中推送相同的索引,此行会导致问题“tup.index(i)”,因为“HORSE”值它将获得“HORSE”的第一个索引。

    尝试改变你的元组的值。

    无论如何你可以检查https://www.pythonforbeginners.com/dictionary/how-to-use-dictionaries-in-python/

    【讨论】:

      【解决方案2】:

      index() 方法在元组中搜索给定元素并返回其位置。

      但是,如果同一个元素多次出现,则返回第一个/最小的位置。

      因此,在您的情况下, tup.index("HORSE") 每次都返回 0 作为其索引。由于您传递的元组中只有两个唯一元素,因此返回的dict只有2个键值对

      【讨论】:

        【解决方案3】:

        这个元组中有相同的元素。 index 返回第一个元素的索引 - 所以,你的程序会这样做:

        1. 开始第一次迭代 - i"HORSE"index 返回 0。
        2. 第二次迭代 - i 再次为 "HORSE"index 将返回它的第一次出现,再次为 0。

        这一路走来——除了"HORS"(我认为这只是一个错误)。

        解决办法:

        循环遍历索引而不是元组本身,如下所示:

        for i in range(len(tup)):
            results[i] = len(tup[i])
        

        【讨论】:

          【解决方案4】:

          tup中有重复值,.index()返回第一个。

          听起来像你想要的

          words = ("HORSE", "HORSE", "HORS", "HORSE")
          index_to_length = {
            i: len(w)
            for (i, w)
            in enumerate(words)
          }
          print(index_to_length)
          

          【讨论】:

            【解决方案5】:

            tup.index(i) 将始终为您提供元组中第一个条目的索引。

            因为你有三次相同的元素,dict 不能接受重复的键,它正在替换相同的键

            你可以这样做:

            def check_horse_winner(tup):
                results=dict()
                for i,j in enumerate(tup):
                    results[i]=len(j)
                return results
            print(check_horse_winner(("HORSE", "HORSE", "HORS", "HORSE")))
            

            替代方案:

            print({j:len(i) for j,i in enumerate(("HORSE", "HORSE", "HORS", "HORSE"))})
            

            【讨论】:

              【解决方案6】:

              使用enumerate

              例如:

              def check_horse_winner(tup):
                  results=dict()
                  for i, v in enumerate(tup):
                      results[i]=len(v)
                  return results
              print(check_horse_winner(("HORSE", "HORSE", "HORS", "HORSE")))
              # --> {0: 5, 1: 5, 2: 4, 3: 5}
              

              【讨论】:

                猜你喜欢
                • 2020-05-21
                • 2020-11-20
                • 2012-09-20
                • 2011-02-07
                • 2011-12-30
                • 2014-09-14
                • 2018-01-30
                • 2016-08-14
                • 2013-09-09
                相关资源
                最近更新 更多