Разделяйте предметы и складывайте их в пары - PullRequest
1 голос
/ 03 апреля 2011

Итак, у меня есть переменная a, которая содержит:

WOOP:2,DERV:2,WHAT:2,MATE:1

И я бы хотел разделить их так, чтобы это выглядело так:

[('WOOP',2),('DERV',2),('WHAT',2),('MATE',1)]

Ответы [ 4 ]

3 голосов
/ 03 апреля 2011

этот однострочник сделает это

L = [(f1, int(f2)) for x in a.split(",") for f1, f2 in (x.split(":"),)]

однако я, вероятно, вместо этого напишу

L = []
for x in a.split(","):
    f1, f2 = x.split(":")
    L.append((f1, int(f2)))
2 голосов
/ 03 апреля 2011

Попробуйте:

l = [ tuple(s.split(':')) for s in a.split(',') ]
l = [ (t[0], int(t[1])) for t in l ]

Если вы согласны с [['WOOP',2], ['DERV',2], ... ], то еще проще:

l = [ s.split(':') for s in a.split(',') ]
l = [ (t[0], int(t[1])) for t in l ]
1 голос
/ 03 апреля 2011

Я бы не стал делать это в одной строке:

>>> s = 'WOOP:2,DERV:2,WHAT:2,MATE:1'
>>> def convert_pair(pair):
...     word,number = pair.split(':')
...     return str(word),int(number)
... 
>>> [convert_pair(pair) for pair in s.split(',')]
[('WOOP', 2), ('DERV', 2), ('WHAT', 2), ('MATE', 1)]

Хотя я не могу придумать лучшего названия для convert_pair в настоящее время.

0 голосов
/ 03 апреля 2011

Если a - строка, вы можете использовать что-то вроде этого:

result = map(lambda x: (x.split(":")[0], int(x.split(":")[1])), a.split(",")

Если это продиктовано, это намного проще:

result = zip(a.keys(), a.values())

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...