我正在寻找一个答案,如何将两个for循环放入列表理解中,其中一个for循环嵌入第二个for循环中。在此示例中是否还可以避免使用for循环?此示例的目标应该是从列表中提取值到一个列表中,然后将值嵌入到另一个列表中。
slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
li = list(slov.keys())
hod = [i for i in li if len(i)==3]
slo = []
for k in hod:
j = slov[k]
for l in j:
slo.append(l)
谢谢。
答案 0 :(得分:3)
使用for循环可使您的代码更具可读性和直接性,但是,如果您坚持单列列表理解,则为:
slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
slo = [l for k in (i for i in slov.keys() if len(i)==3) for l in slov[k]]
print(slo)
输出:
[1.0, 2.0, 6.0]
答案 1 :(得分:0)
您可以使用itertools.chain
来展平长度为3的键的值列表:
from itertools import chain
slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
slo = list(chain.from_iterable(slov[k] for k in slov if len(k) == 3))
print(slo)
# [1.0, 2.0, 6.0]
答案 2 :(得分:0)
我可以看到上面已经给出的一些答案。在下面,您会找到相同的略微修改版本。
slov = {"abc":[1.0, 2.0], "b": [3.0], "a12": [6.0]}
print ([j for k, i in slov.items() if len(k) == 3 for j in i]) # Outer Loop (for k, i in slov.items() if len(k) == 3), Inner Loop (for j in i)
# Output - [1.0, 2.0, 6.0]
我希望这很重要...:)
答案 3 :(得分:0)
另外两个嵌套选项。
首先用匹配条件的键构建一个新字典:
[ item for values in { k: v for k, v in slov.items() if len(k) == 3 }.values() for item in values ]
[ item for values in [ v for k, v in slov.items() if len(k) == 3 ] for item in values ]
这部分[ v for k, v in slov.items() if len(k) == 3 ]
以嵌套列表[[1.0, 2.0], [6.0]]
的形式返回结果,因此需要将其嵌套在列表理解中。
两个都返回#=> [1.0, 2.0, 6.0]