2015-03-11 4 views
0

Что было бы самым эффективным способом добавления элемента в существующий список в качестве другого под-списка. например, принимая во внимание данные [ «строки»] список, следующие:python - добавить элемент в список всегда в виде подписок

for indx, row in enumerate(my_data): 
    data['rows'].append(row) 

делает работу, когда строка уже список.

> 'Rows': [['150', '01'], ['10', '02'], ['22', '03'], ['33', '4'] ... 

Однако, если значение в строке не список, это будет производить:

> 'Rows': ['150', '10', '22', '33', '44', '15'] 

Я условие, что в случае, если строка не список использует data['Rows'].append(list(row)), но там должна быть лучшим способом ..

+2

'данных [ 'Ряды '] .append (list()) 'Не будет перечислить существующий список. Поэтому вы должны найти, чтобы использовать это в любом сценарии. Однако он создает копию. Поэтому имейте это в виду. – Jkdc

ответ

0

Если я правильно понял ваш вопрос, вы могли бы сделать что-то вроде этого:

data['Rows']=data.get('Rows', []).append(list(row)) 

Это создаст список, если он уже не присутствует в словаре.

Возможно, вы переформулируете свой вопрос, чтобы сделать его более понятным. Вы говорите «если это не список», но неясно, что это такое. Поскольку вы работаете с dicts, я предположил, что это означает, что ключа нет.

1

Если я правильно понял ваш вопрос, что-то вроде

У меня есть список элементов, эти элементы могут быть перечислены уже, они не могут быть. Если они являются списками, я хочу, чтобы они были добавлены как таковые. Если они не являются списками, я хочу, чтобы они были завернуты в список, а затем я хочу, чтобы в результате был добавлен список из одного элемента.

Это то, что я тоже боролся с, и лучшее, что я мог придумать что-то вроде следующего:

elems = [1,2,[3,4],5] 

data1 = [] 
for e in elems: 
    data1.append(e if isinstance(e, list) else [e,]) 
print data1 

# Or with a lambda function that does the work for you 
wrap = lambda x: x if isinstance(x, list) else [x,] 

data2 = [] 
for e in elems: 
    data2.append(wrap(e)) 
print data2 

Оба выхода:

[[1], [2], [3, 4], [5]] 
+0

Это здорово, лямбда также выполняет эту работу! Зачем нужна запятая: ... else [x,] –

+2

@ Алгина Это не так. На самом деле это необходимо только при работе с кортежами, состоящими из одного элемента. Я предполагаю, что джедуарды использовали эту форму по привычке. – Eithos

+1

Это не так. Это просто привычка. Для одноэлементных списков '[x]' отлично. Для одноэлементных * кортежей * вам нужно это: '(x,)' – jedwards

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