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

Ibo*_*lit 2 python split tuples

我有一串键值对,不幸的是用相同的符号分隔.有没有办法将它"拆分"成元组列表,而不使用lambda?

这是我有的:

Moscow|city|London|city|Royston Vasey|vilage
Run Code Online (Sandbox Code Playgroud)

我想要的是:

[("Moscow","city"), ("London", "city")....] 
Run Code Online (Sandbox Code Playgroud)

mgi*_*son 11

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

第一,拆分对串'|'然后zip每隔一个元素一起:

data = s.split('|')
print zip(data[::2],data[1::2])
Run Code Online (Sandbox Code Playgroud)

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


eyq*_*uem 8

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

it = iter(s.split('|'))
print [(x,next(it)) for x in it]
Run Code Online (Sandbox Code Playgroud)

  • 出于向前兼容的原因,鼓励`next(it)`而不是`it.next()`可能更好. (3认同)

imk*_*ost 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))
Run Code Online (Sandbox Code Playgroud)

输出是 [('Moscow', 'city'), ('London', 'city'), ('Royston Vasey', 'vilage')]


Joh*_*ooy 5

对于Python2

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

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