假设我有以下字符串:
data = """
Pakistan[country]
Karachi
lahore
islamabad
UAE[country]
dubai
sharjah
India[country]
goa
chennai
"""
如何在此处使用itertools.groupby
来决定(以国家/地区为键)及其对应的城市?我最接近的是
from itertools import groupby
filtered = (line for line in data.split("\n") if line)
for key,values in groupby(filtered,lambda line: line.endswith('[country]')):
print(key)
print(list(values))
但是,如何正确地将结果分组?我对其他可能的解决方案不感兴趣(我自己写了一个生成器函数),但想明确地使用/理解itertools.groupby
。
我的生成器函数看起来像
def grouper(string):
collect,country,cities = False,None,list()
filtered = (line for line in string.split("\n") if line)
for line in filtered:
if line.endswith('[country]') and not collect:
country = line.replace("[country]","")
collect = True
elif line.endswith('[country]') and collect:
yield {country: cities}
country = line.replace("[country]","")
cities = list()
else:
cities.append(line)
if cities:
yield {country: cities}
for dct in grouper(data):
print(dct)
for dct in grouper(data):
print(dct)
哪个产量
{'Pakistan': ['Karachi','lahore','islamabad']}
{'UAE': ['dubai','sharjah']}
{'India': ['goa','chennai']}