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