2016-04-15 3 views
1

Я объект, который выглядит какSplit объект питона на два объекта

object = [{'number':'230/600','blah':'hi'},{'number':'240/620','blah':'hey'}] 

, который я хочу разделить на следующий формат

[{'first':'230','second':'600', 'blah':'hi'},{'first':'240','second':'620','blah':'hey'}] 

Любые советы о том, как сделать это разделение на основе офф что происходит до и после /?

ответ

2

Предполагая, что формат фиксирован, вы можете сделать это:

>>> object = [{'number':'230/600'},{'number':'240/620'}] 

>>> for value in object: 
...  numbers = value['number'].split('/') 
...  new_object.append({'numbera': numbers[0], 'numberb': numbers[1]}) 
... 

>>> new_object 
[{'numberb': '600', 'numbera': '230'}, {'numberb': '620', 'numbera': '240'}] 
>>> 

Edit: Это было до того, как вопрос был отредактирован. Ответ Майка отлично подходит для отредактированного вопроса.

+0

, что если есть другой элемент данных, который не изменяется, но должно быть в новой? См. Правки. Например: 'object = [{'number': '230/600', 'blah': 'hi'}, {'number': '240/620', 'blah': 'hey'}]' – nquestion

+0

@nquestion вы можете клонировать список 'object' с [:] как' foo = object [:] '** EDIT: ** это было для вас комментарий, прежде чем вы его редактируете. – Eekan

+0

@Eekan Итак, могу ли я просто сделать 'new_object.append ({'numbera': numbers [0], 'numberb': numbers [1], 'blah': value ['blah']})', чтобы захватить этот 'blah 'элемент? – nquestion

1

Это работает:

res = [] 
for item in L: 
    d = {} 
    for key, value in item.items(): 
     split_value = value.split('/') 
     if len(split_value) > 1: 
      for entry, name in zip(split_value, ['first', 'second']): 
       d[name] = entry 
     else: 
      d[key] = value 
    res.append(d) 

Сейчас:

>>> res 
[{'blah': 'hi', 'first': '230', 'second': '600'}, 
{'blah': 'hey', 'first': '240', 'second': '620'}] 
+0

. Что такое' abc'? – nquestion

+0

@nquestion: для 'numbera',' numberb' и 'numberc'. Взгляните на документацию для ['zip()'] (https://docs.python.org/3/library/functions.html#zip). – zondo

+0

'abc' - это буквы, которые будут добавлены к' number', чтобы сформировать 'numbera' и т. Д. Если у вас есть более трех элементов для разделения, вам нужно больше букв. 'string.ascii_lowercase' может быть полезен здесь. –

Смежные вопросы