我目前有一个带键值的字典和一个带值的列表。
data = {
'total': {
'06724': 0,
'06725': 0,
'06726': 0,
'06727': 0,
'06712': 22,
'06713': 35,
'06714': 108,
'06715': 70,
'06716': 0,
'06717': 24,
'06718': 0,
'06719': 0,
'06720': 0,
'06709': 75,
'06710': 123,
'06711': 224,
'06708': 28,
'06723': 0,
'06721': 0,
'06722': 0
},
'item_number': ['1', '2', '3', '4', '5', '6', '7', '8', '9']
}
for Index, value in enumerate(data['total'].values()):
if value and value != '0':
print(data['item_number'][Index], value)
我想做的是,我想删除'total'中所有值为0的值,这意味着它最终只会是9个数字,加起来就是item_number
。
我想要实现的是打印输出:
预期:
{
'1': 22,
'2': 35,
'3': 108,
'4': 70,
'5': 24,
'6': 75,
'7': 123,
'8': 224,
'9': 28
}
其中key是item_number
,值是total
。
然而,我目前尝试的代码给了我错误:
print(data['item_number'][Index], value)
IndexError: list index out of range
我相信这是由于Index
在每个循环中增加。我想知道如果值为0,我如何跳过计数增加?
3条答案
按热度按时间oug3syen1#
请使用计数变量而不是
enumerate()
,或者在枚举之前进行筛选。计数变量
输出量:
先过滤
(Same输出)
使用
zip()
(如Andrej's answer)可以进一步简化此操作。注意:为了简单起见,我在这里没有使用dict,因为您发布的代码没有使用dict。不过,我认为如何合并dict是显而易见的。
jmo0nnb32#
如果我没理解错的话:
印刷品:
8yparm6h3#
这里有两项任务:
1.过滤掉
data["total"]
中的零值1.创建一个字典,其中键是
data["item_number"]
的元素,值来自我们上面创建的过滤集合。所以,让我们这样做:
它给出了所需的
new_dict
:如果您将
filtered_values
定义为生成器表达式,则可以保存一个通过data["total"]
的循环,或者将这两行组合在一起: