2014-01-02 3 views
1

У меня есть список, содержащий словарь: data = ['a','b','c',{1:'d',2:'e'}]. То, что я хочу в файле csv, - ['a','b','c','d','e'].Python, как написать смешанный список в файл csv?

Я могу сделать это, сначала преобразуя элемент слова в список, заменив его на список, а затем напишем измененный data в файл csv. Но мне нужен метод, который может записывать data в файл csv, не меняя его на data = ['a','b','c','d','e'].

Спасибо.

+3

ли словарные значения ('' d' и é') сортируются по ключ или значение? – Tim

+0

значения сортируются по ключу. – user3138073

ответ

1

Учитывая, что в вашем списке есть разные типы, и вы хотите обрабатывать каждый из этих типов по-разному, вы должны попытаться использовать isinstance(x, type) см. the documentation.

data = ['a', 'b', 'c', {1:'d', 2:'e'}] 

def flattener(alist): 
    flatten = [] 
    for i in alist: 
     if isinstance(i, dict): 
      for j in sorted(i): # Sort by keys. 
       yield i[j] 
     elif isinstance(i,str): 
      yield i 

flatten = [i for i in flattener(data)] 

[выход]:

['a', 'b', 'c', 'd', 'e'] 

Чтобы получить список в файл CSV, просто:

flatten = ['a', 'b', 'c', 'd', 'e'] 
with open('out.csv', 'w') as fout: 
    fout.write(','.join(flatten)) 
+0

Это не гарантирует порядок вывода '' d ',' e'', и определение соответствующего порядка зависит от ответа на вопрос @ Тима. – DSM

+0

, но ОП может сортировать список сланцев позже, нет? – alvas

+1

Вы можете использовать 'flatten.extend (i.values ​​())' вместо того, чтобы перебирать элементы, если хотите. Этот код также имеет большое значение в качестве функции генератора, где вы «отдаете», а не добавляете каждое значение (и если вы находитесь в Python 3.3 или более поздней версии «from from», а не 'extend'). Порядок значений словаря не гарантируется, но он, вероятно, может работать для небольших последовательных целых ключей, если в словаре никогда не было других типов ключей. – Blckknght

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