将字符串拆分为元组列表?

时间:2013-03-18 15:25:46

标签: python split tuples

我有一串键值对,遗憾的是它们被相同的符号分开。有没有办法将它“拆分”成元组列表,而不使用lambda?

这就是我所拥有的:

Moscow|city|London|city|Royston Vasey|vilage

我想要的是什么:

[("Moscow","city"), ("London", "city")....] 

5 个答案:

答案 0 :(得分:11)

这真的很容易......

首先,将'|'上的字符串拆分为zip所有其他元素:

data = s.split('|')
print zip(data[::2],data[1::2])

在python3中,您需要:print(list(zip(data[::2],data[1::2]))

答案 1 :(得分:7)

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')]

答案 2 :(得分:7)

s = 'Moscow|city|London|city|Royston Vasey|vilage'

it = iter(s.split('|'))
print [(x,next(it)) for x in it]

答案 3 :(得分:4)

对于Python2

>>> s = "Moscow|city|London|city|Royston Vasey|vilage"
>>> zip(*[iter(s.split('|'))]*2)
[('Moscow', 'city'), ('London', 'city'), ('Royston Vasey', 'vilage')]

Python3当然需要list(zip(...))

答案 4 :(得分:1)

您可以使用city, status, remaining = s.split("|", 2)和一些递归方法city_split(s)来实现您想要的效果。