首页 > 解决方案 > 迭代字典键和值

问题描述

我有一个如下的字典和一个名为“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)]

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

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

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]

标签: pythonlistdictionaryiteration

解决方案


在 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)]

推荐阅读