处理 JSON 响应时是否需要嵌套循环?

Are nested loops required when processing JSON response?

我有一个字典列表(JSON 响应)。每个字典都包含一个带有字符串列表的键值对。我正在使用嵌套的 for 循环处理这些字符串,效果很好。

但是,我想知道是否可以使用 product 方法将两个 for 循环折叠成一个循环。显然我不能在范围函数中使用循环变量 a 因为它还没有定义。

有没有办法不用多次迭代数据就可以做到这一点?

from itertools import product

dicts = [
    {
        'key1': 'value1',
        'key2': ['value2', 'value3']
    },
    {
        'key1': 'value4',
        'key2': ['value5']
    }
]

count = len(dicts)
for a in range(count):
    for b in range(len(dicts[a]["key2"])):
        print "values: ", dicts[a]["key2"][b]

for a, b in product(range(count), range(len(dicts[a]["key2"]))):
    print("values: ", dicts[a]["key2"][b])

取决于你的目标是什么。你可以这样做:

dicts = [
    {
        'key1': 'value1',
        'key2': ['value2', 'value3']
    },
    {
        'key1': 'value4',
        'key2': ['value5']
    }
]

all_vals = []
for d in dicts:
    all_vals += d['key2']
print(", ".join(all_vals))

虽然您可以将其折叠成一个循环,但不值得:

from itertools import chain
from operator import itemgetter

for val in chain.from_iterable(map(itemgetter('key2'), dicts)):
    print("value:", val)

只保留嵌套循环并删除笨拙的 range-len 更具可读性:

for d in dicts:
    for val in d['key2']:
        print("value:", val)