我有一串键值对,不幸的是它们被相同的符号分开。有没有办法“将其”分解成元组列表,而不使用lambda?将字符串拆分为元组列表?
这里是我有:
Moscow|city|London|city|Royston Vasey|vilage
我想要什么:
[("Moscow","city"), ("London", "city")....]
我有一串键值对,不幸的是它们被相同的符号分开。有没有办法“将其”分解成元组列表,而不使用lambda?将字符串拆分为元组列表?
这里是我有:
Moscow|city|London|city|Royston Vasey|vilage
我想要什么:
[("Moscow","city"), ("London", "city")....]
def 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))
输出是[('Moscow', 'city'), ('London', 'city'), ('Royston Vasey', 'vilage')]
这是一个非常简单的一个真的...
首先,拆分字符串上'|'
然后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]
对于Python2
>>> s = "Moscow|city|London|city|Royston Vasey|vilage"
>>> zip(*[iter(s.split('|'))]*2)
[('Moscow', 'city'), ('London', 'city'), ('Royston Vasey', 'vilage')]
Python3只需当然list(zip(...))
你可以使用city, status, remaining = s.split("|", 2)
和一些递归方法city_split(s)
来实现你想要的。
@Ibolit你应该知道,如果有N个元组要提取字符串,这个解决方案创建了名为“remaining”的N-1个字符串,没有真正的理由,因为有没有这个的其他方式。 – eyquem 2013-03-18 16:12:16
我已经尝试编写一个函数,它将字符串分隔符分开,然后遍历它并生成元组中的两个下一个元素。 – Ibolit 2013-03-18 15:31:01
@Ibolit你可以**显示**你在你的问题中尝试过什么? – Neal 2013-03-18 15:31:21