[英]Convert for loop to list comprehension
我正在尝试将我的代码转换为列表理解,但无法弄清楚
我的代码:
dicts = [
{"p": 1, "p": 2, "olp": 3, "r": 4},
{"s": 1, "o": 2, "e": 3, "cs": 4},
{"vc":1, "txc":2, "faw":3, "e": 4}
]
l = []
for d in dicts:
for k, v in sorted(d.items(), key=lambda kv: kv[1]):
if v % 4 == 0:
if len(k) > 1:
l.append(k[1])
else:
l.append(k)
elif v % 2 == 0:
if len(k) > 2:
l.append(k[0])
else:
l.append(k)
print(''.join(l))
我试过这个,但不起作用,你能帮我吗?
l = [
k[0] if len(k)>2 else k elif v % 2 == 0
k[1] if len(k)>1 else k if k % 4 == 0
for k,v in sorted(d.items(), key=lambda kv: kv[1]) for d in dicts
]
l
预期输出:
['p', 'r', 'o', 's', 't', 'e']
重新格式化为单行列表理解,代码如下:
>>> l = [k[1] if v%4 == 0 and len(k) > 1 else k[0] if len(k) > 2 else k for d in dicts for k,v in sorted(d.items(), key=lambda kv: kv[1]) if v%2 == 0]
>>> l
['p', 'r', 'o', 's', 't', 'e']
或者格式化得更好一点:
l = [
k[1] if v%4 == 0 and len(k) > 1
else k[0] if len(k) > 2
else k
for d in dicts
for k,v in sorted(d.items(), key=lambda kv: kv[1])
if v%2 == 0
]
据我所知,你也不需要在d.items()
上调用sorted()
,所以你可以省略它,除非你的 MWE 之外需要它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.