我有一串键值对的字符串,不幸的是它们被同一个符号隔开。是否有一种方法可以"仅仅分割"它成为元组列表,而不使用lambda?
这是我目前的代码:
Moscow|city|London|city|Royston Vasey|vilage
What i want:
[("Moscow","city"), ("London", "city")....]
我有一串键值对的字符串,不幸的是它们被同一个符号隔开。是否有一种方法可以"仅仅分割"它成为元组列表,而不使用lambda?
这是我目前的代码:
Moscow|city|London|city|Royston Vasey|vilage
What i want:
[("Moscow","city"), ("London", "city")....]
这其实很简单...
首先,按照 '|'
进行字符串分割,然后将每隔一个元素zip
在一起:
data = s.split('|')
print zip(data[::2],data[1::2])
在Python3中,您需要: print(list(zip(data[::2],data[1::2])))
s = 'Moscow|city|London|city|Royston Vasey|vilage'
it = iter(s.split('|'))
print [(x,next(it)) for x in it]
next(it)
而不是it.next()
可能更好。 - DSM.next
会变成 .__next__
,以便与其他方法(如 __str__
和 __len__
等)保持一致。 - John La Rooydef group(lst, n):
for i in range(0, len(lst), n):
val = lst[i:i+n]
if len(val) == n:
yield tuple(val)
a = 'Moscow|city|London|city|Royston Vasey|vilage'
list(group(a.split('|'), 2))
[('莫斯科', '城市'), ('伦敦', '城市'), ('罗伊斯顿瓦西', '村庄')]
。Python3:
>>> s = "Moscow|city|London|city|Royston Vasey|vilage"
>>> list(zip(*[iter(s.split('|'))]*2))
[('Moscow', 'city'), ('London', 'city'), ('Royston Vasey', 'vilage')]
Python2:
zip(*[iter(s.split('|'))]*2)
s.split('|')
创建列表并创建迭代器 iter(s.split('|'))
后,会再次创建相同迭代器的另一个列表,因此需要额外 unpacking 到 zip 的参数。 - eyquemcity, status, remaining = s.split("|", 2)
和一些递归方法 city_split(s)
来实现您想要的效果。