我需要一个通用的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?
您可以通过测试输入类型来模拟“ 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
对于dict
,请使用items
方法:
for k, v in {"foo": "bar"}.items():
print(k, v)
列表无对应项。但是,您可能需要检查itertools
documentation中的石斑鱼食谱。
要将字典转换为适用于itertools
的可迭代对象,请使用grouper
。