Хранение словаря из Excel - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь сделать словарь из Excel. Я написал один код, но он не дает словарь, как ожидалось. Под одной картой политики все данные должны доходить до того, как приходит другая карта политики. Вы получите это из ожидаемого результата.

Это Excel: Sheet1.xlsx

Это мой ожидаемый результат:

res1= {'Nodeb_IN_New':{'policy_id':107,'default':'class-default','mplsa':['h10','h11','l12','l13','l14'],'mpls':['h1','h2','l1'],'qos':[7,5,4],'nokia':'dscp-fc-map','dscp':['ef','af41,'af11','af21','af31']},'Nokia_SRAN_S1-MME_X2_IN':{'policy_id':'102',default':",'mplsa':['h15','h16'],'mpls':['h1'],'qos':[7],'nokia':'dscp-fc-map','dscp':['ef','nc1']}}

Я написал такой код:

from xlrd import open_workbook

book = open_workbook('test.xlsx')
sheet = book.sheet_by_index(1)

# read header values into the list    
keys = [sheet.cell(0, col_index).value for col_index in range(sheet.ncols)]

dict_list = []
for row_index in range(1, sheet.nrows):
    d = {keys[col_index]: sheet.cell(row_index, col_index).value 
         for col_index in range(sheet.ncols)}
    dict_list.append(d)

print (dict_list)

И получить другой вывод:

[{'policy_map': 'Nodeb_IN_New', 'policy_id': 107.0, 'default': 'class-default', 'class': 'mobility-platinum', 'mplsa': 'h10', 'mpls': 'h1', 'qos': 7.0, 'nokia': 'dscp-fc-map', 'dscp': "['ef']"}, {'policy_map': '', 'policy_id': '', 'default': '', 'class': 'mobility-gold-new', 'mplsa': 'h11', 'mpls': 'h2', 'qos': 5.0, 'nokia': 'dscp-fc-map', 'dscp': "['af41']"}, {'policy_map': '', 'policy_id': '', 'default': '', 'class': 'mobility-silver-new', 'mplsa': 'l12 l13 l14', 'mpls': 'l1', 'qos': 4.0, 'nokia': 'dscp-fc-map', 'dscp': "['af11', 'af21', 'af31']"}, {'policy_map': 'Nokia_SRAN_S1-MME_X2_IN', 'policy_id': 102.0, 'default': '', 'class': 'Nokia_SRAN_mobility_platinum', 'mplsa': 'h15 h16', 'mpls': 'h1', 'qos': 7.0, 'nokia': 'dscp-fc-map', 'dscp': "['ef', 'nc1']"}] 

Пожалуйста, предложите лучший код для получения выходных данных.

1 Ответ

0 голосов
/ 25 июня 2019

Это должно работать:

result = {}
for row_index in range(1, sheet.nrows):
    result[sheet.cell(row_index, 0).value] = {keys[col_index]: sheet.cell(row_index, col_index).value 
                                              for col_index in range(1,sheet.ncols)}

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