5

キーと値のペアの文字列がありますが、残念ながら同じ記号で区切られています。ラムダを使用せずに、タプルのリストに「分割」する方法はありますか?

これが私が持っているものです:

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 に答える