Python:将同一个键的多个实例转换为多行

Python:将同一个键的多个实例转换为多行,python,Python,我正在尝试处理一个大致如下所示的文件: f=0412345678 t=0523456789 t=0301234567 s=Party! flag=urgent flag=english id=1221AB12 例如,我知道我可以使用Python shlex解析那些没有重大问题的内容,比如: entry = "f=0412345678 t=0523456789 t=0301234567 s=Party! flag=urgent flag=english id=1221AB12" line =

我正在尝试处理一个大致如下所示的文件:

f=0412345678 t=0523456789 t=0301234567 s=Party! flag=urgent flag=english id=1221AB12
例如,我知道我可以使用Python shlex解析那些没有重大问题的内容,比如:

entry = "f=0412345678 t=0523456789 t=0301234567 s=Party! flag=urgent flag=english id=1221AB12"

line = shlex.split(entry)
然后,我可以执行for循环并迭代键值对

row = {}
for kvpairs in line:
    key, value = kvpairs.split("=")
    row.setdefault(key,[]).append(value)
print row
结果:

{'id': ['1221AB12'], 's': ['Party!'], 'flag': ['urgent', 'english'], 't': ['0523456789', '0301234567'], 'f': ['0412345678']}
到目前为止还不错,但我很难找到一种有效的方法来输出原始行,使输出看起来像:

id=1221AB12 f=0412345678 t=0523456789 s=Party! flag=urgent 
id=1221AB12 f=0412345678 t=0523456789 s=Party! flag=english
id=1221AB12 f=0412345678 t=0301234567 s=Party! flag=urgent 
id=1221AB12 f=0412345678 t=0301234567 s=Party! flag=english

来自itertools和

from itertools import product
from collections import OrderedDict
a = OrderedDict({'id': ['1221AB12'], 's': ['Party!'], 'flag': ['urgent', 'english'], 't': ['0523456789', '0301234567'], 'f':              ['0412345678']})
res = product(*a.values())
for line in res:
    print " ".join(["%s=%s" % (m, n) for m,n in zip(a.keys(), line) ])
结果

s=Party! f=0412345678 flag=urgent id=1221AB12 t=0523456789
s=Party! f=0412345678 flag=urgent id=1221AB12 t=0301234567
s=Party! f=0412345678 flag=english id=1221AB12 t=0523456789
s=Party! f=0412345678 flag=english id=1221AB12 t=0301234567

这些键值对的顺序重要吗?@SebastianPhilipp:是的。它们应始终以相同的顺序打印。(结果更像TSV,而不是如图所示的空间分隔值)epic!介意解释一下*在一位女士面前的作用吗?以前从未见过。(它用来打开参数列表)真的!我以前在args和kwargs附近见过它。。。又称作如何识别像我这样糟糕的程序员。:-)类似这样的内容:对于vrows中的v:k,krows:print(“%s=%s”%(str(k[0]),v[krows.index(k)]),print“”?