首页 > 解决方案 > 等价于 Python 的 Lua 的 pairs()

问题描述

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

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

输出“foo bar”,并且

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

输出“0 foo”和“1 bar”,就像 Lua 等价物一样(除了针对 0-indexing 和 1-indexing 进行了更正)。

这样的 API 存在吗?

标签: pythonpython-3.xluaiteration

解决方案


您可以通过测试输入类型来模拟“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

另外:更改为return enumerate(o,1)使索引从 1 开始。


推荐阅读