Форум сайта python.su
0
Добрый день, по работе столкнулся с задачей создать словарь ключи которого должны быть списками, например:
['Львовская обл.', "КАМЯНКА-БУЗКИЙ РАЙОН", 'САПИЖАНКА']: '111111'
'[\'Львовская обл.\', "КАМЯНКА-БУЗКИЙ РАЙОН", \'САПИЖАНКА\']': '111111'
# -*- coding: utf-8 -*- import xlrd import xlwt from xlutils.copy import copy rb = xlrd.open_workbook('справочник населенных пунктов.xls') # открываем файл с кодами населенных пунктов sheet = rb.sheet_by_index(0) # считывем первый лист книги value1 = sheet.col_values(0)[1:] # считываем значение ячеек 1 столбца начиная с 2 value2 = sheet.col_values(1)[1:] # считываем значение ячеек 2 столбца начиная с 2 value3 = sheet.col_values(2)[1:] # считываем значение ячеек 3 столбца начиная с 2 value4 = sheet.col_values(3)[1:] # считываем значение ячеек 4 столбца начиная с 2 city_code = [] for i in value4: city_code.append(str(int(i))) value5 = [value1, value2, value3] regions = list(map(list, zip(*value5))) # соединяем в один список значение ячеек 1,2,3 столбца # print(regions) check_code = dict((str(i[0]), i[1]) for i in list(zip(regions, city_code))) print(check_code)
Отредактировано Tsunetomo (Март 14, 2019 00:34:22)
Офлайн
568
Tsunetomo
1) Если хотите получить строку из списка, то применяйте либо “”.join() либо json
2) Если списки известной длины, то используйте вместо них кортежи - кортежи хешируемые объекты и могут быть ключами словаря
3) Имхо, работать со строками, как с представлением некоторого объекта это как-то фу. Сделайте нормальные объекты! Будете хранить в своих списках ссылки на объект, а не какую-то непонятную строку.
class Place: def __init__(self, name): self.name = name class Places: def __init__(self): self.places = [] def add(self, place): self.places.append(place) places = Places() def read_xls(filename): for record in data: place = Place(record.value[1]) places.add(place)
Офлайн
253
TsunetomoЕсли коротко то такая задача неразрешима. Ключами могут быть ТОЛЬКО неизменяемые сущности.
с задачей создать словарь ключи которого должны быть списками
Офлайн
27
Если уж очень хочется видеть ключ как список, то тогда используйте кортеж. Он точно хешируемый объект и годится на роль ключа.
Офлайн