在类中使用'for'循环迭代字典

时间:2017-05-12 12:59:10

标签: python class dictionary for-loop

当我遍历find_total()字典时,我无法从DictionaryTest类的channel_list函数中获取返回值。 Python解释器给了我这个错误:

  

TypeError:'int'对象不可迭代

我在代码中做错了什么?

class DictionaryTest:
    def __init__(self, dictionary):
        self.dictionary = dictionary

    def find_total(self):
        total = 0
        for channel_num, channel_det in self.dictionary:
            total += channel_det['charge']
        return total


channel_list = {1: {'name': 'Sony PIX', 'charge': 3}, 
                2: {'name': 'Nat Geo Wild', 'charge': 6}, 
                3: {'name': 'Sony SET', 'charge': 3},
                4: {'name': 'HBO - Signature', 'charge': 25}}

user_2 = DictionaryTest(channel_list)
print(user_2.find_total())

1 个答案:

答案 0 :(得分:1)

您似乎希望迭代keysvalues。您可以通过迭代items()

来实现此目的
for channel_num, channel_det in self.dictionary.items():

在您的情况下,for something in self.dictionary:仅对键重复。键是整数。但是你试图将整数解包为两个值:channel_num, channel_det这就是它失败的原因。

补充意见:

您只需要for循环中的值,这样您也可以只遍历values()

for channel_det in self.dictionary.values():

真正高级的方法是使用生成器表达式和内置的sum函数:

def find_total(self):
    return sum(channel_det['charge'] for channel_det in self.dictionary.values())