Как записать список значений для одного ключа из списка словаря в Excel / CSV - PullRequest
0 голосов
/ 07 февраля 2020


может быть мой заголовок немного запутанный, поэтому, пожалуйста, позвольте мне объяснить это, у меня есть два списка, в которых:
Первый список: Содержит имя столбца
2-й список : Он содержит список словаря, в котором каждый ключ имеет список значений, и что значения представляют собой смесь различных типов данных. Позвольте мне показать пример данных, мой код, который я реализовал для этого:

    import csv
    csv_columns = ['subStatus','Sub-Tasks','Component name','License Duration']
    dict_data = [
    {'Component name':['Alex','Alex','Alex','Alex'],
     'subStatus':['', '', '', '', '', '', '', '', ''],
    'License Duration':[[{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}], 
                        [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}],
                       [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}],
                       [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}]],
    'Sub-Tasks':[[], [], [], [], [], [], [], []]},
    ]
    csv_file = r'C:\Users\snsingh\Desktop\Names.csv'
    try:
        with open(csv_file, 'w') as csvfile:
            writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
            writer.writeheader()
            for data in dict_data:
                writer.writerow(data)
    except Exception as e:
        print(e)
        print("I/O error")

как вы можете видеть здесь, все ключи имеют разные значения, которые могут быть списком списка или списком диктовок и т. д., но я просто хочу разделить все значения на несколько строк, проблема в том, что мой код помещает все значения в одну строку, я ' я не могу разбить на разные строки
мой ожидаемый CSV-файл должен выглядеть следующим образом:

subStatus   Sub-Tasks Component name    License Duration                                                   

""          []        Alex              [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}]

""          []        Alex              [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}]  

""          []        Alex              [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}]  

""          []        Alex              [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}]  

""          []                          [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}]  

""          []                          [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}] 

""          []                          [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}] 

""          []                                                         

""  

У меня есть еще один вопрос Если возможно, ответьте на него , как показано в Например, в каждом листе Excel есть разные значения в каждом списке, возможно ли так или мы должны иметь одинаковую длину в каждом списке? .
Пожалуйста, предложите мне лучший способ сделайте это, если возможно, я хочу выполнить ту же программу через pandas, также будет признательна за любую помощь.
Заранее спасибо

1 Ответ

1 голос
/ 07 февраля 2020
import csv
import pandas as pd
csv_columns = ['subStatus','Sub-Tasks','Component name','License Duration']

dict_data = [
{'Component name':['Alex','Alex','Alex','Alex'],
 'subStatus':['', '', '', '', '', '', '', '', ''],
'License Duration':[[{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}], 
                    [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}],
                   [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}],
                   [{'self': 'https://jira.infinera.com/rest/api/2/customFieldOption/34024', 'value': 'Perpetual', 'id': '34024'}]],
'Sub-Tasks':[[], [], [], [], [], [], [], []]},
]


data = dict_data[0]

df = pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in data.items() ]))

df.to_csv("output.csv", index = False)

Если вы хотите изменить порядок столбцов, добавьте эту строку кода перед сохранением csv

df = df[['subStatus','Sub-Tasks','Component name','License Duration']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...