【问题标题】:How to return a class value when iterating through a dictionary of said class遍历所述类的字典时如何返回类值
【发布时间】:2015-05-04 21:47:07
【问题描述】:

在这种简化的形式中,我想在迭代类的字典时返回 bar1 的值,以避免需要列表的库出现问题。

class classTest:
    def __init__(self, foo):
        self.bar1 = foo
    def __iter__(self):
        for k in self.keys():
            yield self[k].bar1

aDict = {}
aDict["foo"] = classTest("xx")
aDict["bar"] = classTest("yy")

for i in aDict:
    print i

当前输出为

foo
bar

我的目标是这个输出是

xx
yy

让这个工作我缺少什么?或者这甚至可能吗?

【问题讨论】:

  • 您正在迭代 aDict,这是一个产生键的字典。您没有迭代每个单独的值。字典不会将迭代委托给所包含的值。
  • for val in aDict.values() 如果你想要这些值

标签: python dictionary iterator


【解决方案1】:

您不是遍历类,而是遍历字典。你的班级也没有__getitem__-Method,所以你的__iter__ 甚至都行不通。

要得到你的结果,你可以这样做

for value in aDict.values():
    print value.bar1

【讨论】:

  • 这解释了为什么它的行为方式如此。谢谢
【解决方案2】:

您正在打印密钥。改为打印值:

for k in aDict:
    print aDict[k]

或者您可以直接遍历这些值:

for v in aDict.itervalues():   # Python 3: aDict.values()
    print v

classTest 类上的 __iter__ 未被使用,因为您没有迭代 classTest 对象。 (并不是说它有任何意义。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2015-08-26
    相关资源
    最近更新 更多