gpt4 book ai didi

python - OrderedDictionary.popitem() 无法迭代所有值?

转载 作者:行者123 更新时间:2023-12-01 05:38:46 26 4
gpt4 key购买 nike

我尝试以后进先出的顺序迭代有序字典。虽然对于标准字典来说一切正常,但orderedDict的第一个解决方案 react 很奇怪。看来,虽然 popitem() 返回一个键/值对(但不知何故按顺序,因为我无法用两个变量替换 kv_pair),迭代就完成了。我认为没有简单的方法可以继续处理下一个键/值对。

虽然我找到了两个可行的替代方案(如下所示),但它们都缺乏正常字典方法的优雅性。

根据我在在线帮助中发现的内容,无法做出决定,但我认为我的期望是错误的。有没有更优雅的方法?

from collections import OrderedDict

normaldict = {"0": "a0.csf", "1":"b1.csf", "2":"c2.csf"}

for k, v in normaldict.iteritems():
print k,":",v

d = OrderedDict()
d["0"] = "a0.csf"
d["1"] = "b1.csf"
d["2"] = "c2.csf"

print d, "****"

for kv_pair in d.popitem():
print kv_pair
print "++++"


for k in reversed(d.keys()):
print k, d[k]

print "%%%%"

while len(d) > 0:
k, v = d.popitem()
print k, v

最佳答案

dict.popitem()dict.iteritems() 相同;它从字典中删除一对作为元组,并且您正在循环该对。

最有效的方法是使用 while 循环;不需要调用len(),只需针对字典本身进行测试,空字典被认为是错误的:

while d:
key, value = d.popitem()
print key, value

另一种方法是使用reversed():

for key, item in reversed(d.items()):
print key, value

但这需要首先将整个字典复制到列表中。

但是,如果您正在寻找 FIFO 队列,请使用 collections.deque()相反:

from collections import deque

d = deque(["a0.csf", "b1.csf", "c2.csf"])

while d:
item = d.pop()

或使用deque.reverse()

关于python - OrderedDictionary.popitem() 无法迭代所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18203641/

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