Python 3.8 列表理解中的赋值表达式

Python 3.8 assignment expression in a list comprehension

我是第一次尝试使用新的 assignment expression,需要一些帮助。

给定三行日志输出:

sin = """Writing 93 records to /data/newstates-900.03-07_07/top100.newstates-900.03-07_07/Russia.seirdc.March6-900.12.csv ..
Writing 100 records to /data/newstates-900.03-07_07/top100.newstates-900.03-07_07/India.seirdc.March6-900.6.csv ..
Writing 100 records to /data/newstates-900.03-07_07/top100.newstates-900.03-07_07/US.seirdc.March6-900.15.csv ..
"""

目的是仅提取 State俄罗斯印度美国) 和记录数 (93,100,100) 。所以期望的结果是:

[['Russia',93],['India',100],['US',100]]

这需要经过以下步骤才能翻译成Python:

这是我的错误尝试:

import fileinput
y = [[ z[4].split('/')[-1].split('.')[0],z[1]] 
     for (z:=x.split(' ')) in 
     (x:=sin if sin else fileinput.input()).splitlines())]

这是一种方法:

results = []
for line in sin.split('..'):
    if len(z := line.split(' ')) > 1 :
        results.append([line.split('/')[-1].split('.')[0], z[1]])

这样够好吗?

[[(wrds := line.split())[4].split("/")[-1].split('.')[0], wrds[1]] for line in sin.splitlines()]

我发现使用赋值表达式是多余的。您也可以这样做:

[[line.split('/')[-1].split('.')[0], line.split()[1]] for line in sin.splitlines()]

对于它的价值,你也可以使用正则表达式来获得它,这可能会更多 preferred/efficient。

[list(reversed(l)) for l in re.findall(r'Writing (\d+).+\/([A-Z,a-z]+)\.', sin)]

或更准确地说(转换 int) 和可读性 (根据评论中的 @chepner

[[country, int(count)] for count, country in re.findall(r'Writing (\d+).+\/([A-Z,a-z]+)\.', sin)]