相当于Lua的pairs()对于Python

问题描述 投票:0回答:1

我需要一个通用的API来将Python对象作为键/索引和值对进行迭代。这样:

for k,v in pairs({"foo": "bar"}):
    print(k, v)

输出“ foo bar”,和

for i,v in pairs(["foo", "bar"]):
    print(i, v)

输出Lua等效值(输出0 foo和1 bar)(针对0索引和1索引进行校正的除外)。

是否存在这样的API?

python python-3.x lua iteration
1个回答
0
投票

您可以通过测试输入类型来模拟“ pairs”功能,如果使用字典,则使用items;如果使用列表,元组或默认值为enumerate,则使用enumerate,它将对任何可迭代的对象都适用:

def pairs(o):
    if isinstance(o,dict):
        return o.items()
    else:
        return enumerate(o)


for k,v in pairs({"foo": "bar"}):
    print(k, v)
for i,v in pairs(["foo", "bar"]):
    print(i, v)

打印:

foo bar
0 foo
1 bar

0
投票

对于dict,请使用items方法:

for k, v in {"foo": "bar"}.items():
    print(k, v)

列表无对应项。但是,您可能需要检查itertools documentation中的石斑鱼食谱。

要将字典转换为适用于itertools的可迭代对象,请使用grouper

© www.soinside.com 2019 - 2024. All rights reserved.