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