【问题标题】:Iteration over dictionary keys and values迭代字典键和值
【发布时间】:2021-04-05 01:19:27
【问题描述】:

我有一个如下的字典和一个名为“multi”的函数,它以数字作为参数。该函数将字典中键的每个值乘以作为参数输入的数字。所以我想做的是,我想迭代函数“multi”,以便计算一定范围的“i”

a_dict={'cms': 123, 'dms': 133, 'test': 111}

def multi(i):
    for key, values in a_dict.items():
        values=values*i
        return (key,values)
multi(2)

这是我做的迭代函数的例子

def iterate_(start,end,range_):
    box=[]
    for a in range (start,end+1,range_):
        data=multi(a)
        box.append(data)
    return box

这是输出:

iterate_(10,50,10)

Output: [('cms', 1230), ('cms', 2460), ('cms', 3690), ('cms', 4920), ('cms', 6150)]

返回结果只会返回字典的第一个键。我希望它返回所有字典的键以及每次迭代的更新值。

我确实尝试将“return”更改为“print”,设法获取所有带有更新结果的键,但得到一个空列表。

a_dict={'cms': 123, 'dms': 133, 'test': 111}

def multi(i):
    for key, values in a_dict.items():
        values=values*i
        print (key,values)

def iterate_(start,end,range_):
    box=[]
    for a in range (start,end+1,range_):
        data=multi(a)
        box.append(data)
        a+=5
    return box
    
iterate_(10,50,10)

Output:
cms 1230
dms 1330
test 1110
cms 2460
dms 2660
test 2220
cms 3690
dms 3990
test 3330
cms 4920
dms 5320
test 4440
cms 6150
dms 6650
test 5550
[23]:
[None, None, None, None, None]

【问题讨论】:

  • 为什么 a+=5 在你的 iterate_ 函数中?
  • 忘记删除了,我已将其替换为 range (start,end,range_)

标签: python list dictionary iteration


【解决方案1】:

在 multi function() 中使用 return 你的循环会在第一次迭代中中断,所以它只返回你的 dict 的第一个键值对。 使用 print() 而不是 return 它什么都不返回,这就是为什么你的列表在第二种情况下是空的

这里有一个解决方案。请注意,我们在 iterate_ 函数中使用了“扩展”:

a_dict={'cms': 123, 'dms': 133, 'test': 111}

def multi(i):
    return [(key, i*value) for key, value in a_dict.items()]

def iterate_(start,end,range_):
    box=[]
    for a in range (start,end+1,range_):
        data=multi(a)
        box.extend(data)
        a+=5
    return box

Example:

>>> iterate_(10,50,10)

[('cms', 1230), ('dms', 1330), ('test', 1110), ('cms', 2460), ('dms', 2660), ('test', 2220), ('cms', 3690), ('dms', 3990), ('test', 3330), ('cms', 4920), ('dms', 5320), ('test', 4440), ('cms', 6150), ('dms', 6650), ('test', 5550)]

【讨论】:

    【解决方案2】:

    multi 函数有错误:
    这是解决方案:

    def multi(i):
      for key in a_dict:
        a_dict[key]*=i
      return list(a_dict.items())
        
    

    【讨论】:

      【解决方案3】:

      您需要收集multi 中正在修改的所有元素并将它们一起返回。使用您的两种方法,您是:

      • 返回第一次迭代的值,忽略其余部分
      • 只是在控制台中打印整个字典的操作结果,但从不收集/返回它们。

      因此尝试将 multi 更改为以下内容:

      def multi(i):
          result = [] # Defining a list to accumulate results
          for key, values in a_dict.items():
              result.append((key,values*i)) # Adding results of each iteration
          return result # Returning the list
      

      【讨论】:

        猜你喜欢
        • 2023-02-02
        • 2012-11-12
        • 2018-03-21
        • 2016-01-04
        • 1970-01-01
        • 2015-01-04
        • 1970-01-01
        • 2015-09-19
        • 2018-09-21
        相关资源
        最近更新 更多