gpt4 book ai didi

python迭代字典列表

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:53 25 4
gpt4 key购买 nike

我有一个正在迭代的字典列表。我希望能够将列表传递给容器对象,然后在遍历它时通过检索每个字典的值的元组来遍历容器。

例如:

myDict = {"key1": "value1string", "key2": "value2string"}
myList = [myDict]

container = ContainerObj(myList)
for value1, value2 in container:
print "value1 = %s, value2 = %s" % value1, value2

我希望输出为:

"value1 = value1string, value2 = value2string"

如何在 ContainerObj 中定义 __iter__ 方法来完成此操作?

我尝试执行以下操作,但没有用:

class ContainerObj(object):
def __init__(self, listArg):
self.myList = listArg
self.current = 0
self.high = len(self.myList)

def __iter__(self):
return self.myList.__iter__()

def __next__(self):
if self.current >= self.high:
raise StopIteration
else:
myDict = self.myList[self.current]
self.current += 1
return (
myDict.get("key1"),
myDict.get("key2")
)

最佳答案

我想你想要的是generators .通常,您通过在函数中使用 yield 而不是 return 来执行此操作。但在你的情况下,我认为你可以使用 itertools 来帮助:

from itertools import chain
item_gen = chain(d.values() for d in my_dicts_list)
# Edit: Note that this will give you values continuously (not what you want), should have done
# item_gen = (d.values() for d in my_dicts_list)

要用一个类来做到这一点,你可以这样做:

class MyContainer(object):
def __init__(self, my_list):
self.the_list = my_list

def __iter__(self):
for d in self.the_list:
yield d.values()
# or:
# yield (d.get("key1", None), d.get("key2", None))

然后您可以像使用任何可迭代对象一样使用此对象:

my_con = MyContainer([{"a": 1, "b": 2}, {"a": 3, "b": 4}])
for val1, val2 in my_con:
print "a = %s; b = %s" % (val1, val2)

编辑 1:糟糕,意识到我正在返回。您只需要值。

此外,您实际上是在自己制造发电机。使用内置功能,它会更容易、更轻松。我强烈建议查看 itertools 模块。还有字典的 iterkeysitervaluesiteritems 方法。

关于python迭代字典列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22323066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com