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 中的 pairs() 一样(只是纠正了 0 索引与 1 索引不同的问题)。

有这样的 API 吗?

点赞
用户1126841
用户1126841

对于 dict,使用 items 方法:

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

对于列表没有对应的方法。不过,你可能想查看 itertools 文档中的 grouper 部分的配方。

要将字典转换为可与 grouper 配合使用的迭代器,请使用 itertools.chain.from_iterable({"a": 1, "b": 2}.items())

2019-09-27 14:44:37
用户6451573
用户6451573

你可以通过测试输入类型并使用字典的 items,以及对于列表、元组使用 enumerate,或默认使用 enumerate 来模仿 "pairs" 函数,后者可以处理任何可迭代的对象:

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 开始。

2019-09-27 14:45:57