【问题标题】:Looping over a list and a nested dictionary循环遍历列表和嵌套字典
【发布时间】:2018-10-20 18:42:15
【问题描述】:

我认为标题是正确的。如果没有,我很抱歉。

我将aList 定义为

[24, 19, 18, 15, 15, 23, 18, 15, 18, 15]

aDict定义为

{'1': 18, '2': 76, '3': 0, '4': 13, '5': 4, '6': 30, '7': 25, '8': 21} 

和一个 masterDict 定义(用 0 初始化)为

{'1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}

如何检查aList 中的每个元素是否与aDict 中的值匹配?如果是,将masterDict 中的对应键加1?

我目前使用的代码是

for x in aList:
    for k, v in aDict.iteritems():
        if x == v:
            masterDict[k] = +1

但是,这会返回一个看起来像这样的masterDict

{'1': 1, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}

aList 包含三个出现的元素18,它匹配aDict 中的一个值。我希望将masterDict 中的相应键增加三倍。但是,它只会增加一次。

我希望产生的输出是

{'1': 3, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}

【问题讨论】:

    标签: python list dictionary python-2.x


    【解决方案1】:

    这是因为您的代码中的拼写错误 - 应该是 masterDict[k] += 1 而不是 masterDict[k] = +1

    更改后输出为:{'1': 3, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}

    【讨论】:

      【解决方案2】:

      您可以只在dct 中使用k,如果键产生的值与lst 中的项目匹配,则将mst 中的k 增加1

      mstr = {'1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}
      dct = {'1': 18, '2': 76, '3': 0, '4': 13, '5': 4, '6': 30, '7': 25, '8': 21}
      lst = [24, 19, 18, 15, 15, 23, 18, 15, 18, 15]
      
      for i in lst:
          for k in dct:
              if dct[k] == i:
                  mstr[k] += 1
      
      print(mstr)
      # {'1': 3, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}
      

      【讨论】:

      • @yodish 是的,我现在看到有一个简单的错字:)
      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 2019-03-22
      • 2015-12-06
      • 2022-01-13
      • 2021-02-04
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      相关资源
      最近更新 更多