相当于Lua对Python的pair()

时间:2019-09-27 14:40:05

标签: python python-3.x lua iteration

我需要一个通用的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?

2 个答案:

答案 0 :(得分:3)

您可以通过测试输入类型来模拟“ pairs”功能,如果使用字典,则使用items,如果使用列表,元组或默认为{{1},则使用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 ,使索引从1开始。

答案 1 :(得分:0)

对于dict,请使用items方法:

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

没有等效列表。但是,您可能要检查itertools documentation中的石斑鱼食谱。

要将dict转换为可与grouper一起使用的可迭代对象,请使用itertools.chain.from_iterable({"a": 1, "b": 2}.items())