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

时间:2017-10-02 16:43:07

标签: python nested-loops

我有一个字典列表(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])

2 个答案:

答案 0 :(得分:3)

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

from itertools import chain
from operator import itemgetter

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

只需保留嵌套循环并删除尴尬的范围-len,它就更具可读性:

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

答案 1 :(得分:1)

取决于您的目标。你可以这样做:

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

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