5

我有一串键值对,不幸的是它们用相同的符号分隔。有没有办法在不使用 lambda 的情况下将其“拆分”成一个元组列表?

这是我所拥有的:

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

我想要的是:

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

5 回答 5

15

这真的是一件很容易的事......

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

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

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

于 2013-03-18T15:28:06.173 回答
8
s = 'Moscow|city|London|city|Royston Vasey|vilage'

it = iter(s.split('|'))
print [(x,next(it)) for x in it]
于 2013-03-18T15:31:25.670 回答
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')]

于 2013-03-18T15:30:49.650 回答
6

对于 Python2

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

Python3list(zip(...))当然只需要

于 2013-03-18T15:32:52.347 回答
1

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

于 2013-03-18T15:33:25.703 回答