Найти - Пользователи
Полная версия: Список как ключ словаря
Начало » Python для новичков » Список как ключ словаря
1
Tsunetomo
Добрый день, по работе столкнулся с задачей создать словарь ключи которого должны быть списками, например:
  ['Львовская обл.', "КАМЯНКА-БУЗКИЙ РАЙОН", 'САПИЖАНКА']: '111111'
,
в переменную regions я подготовил список списков для ключей, в переменную city_code я загнал значения словарей. попытался создать нужный мне формат словаря вот таким вот способом: check_code = dict((str(i), i) for i in list(zip(regions, city_code))), но к сожалению на выходе получил вот это:
 '[\'Львовская обл.\', "КАМЯНКА-БУЗКИЙ РАЙОН", \'САПИЖАНКА\']': '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)
FishHook
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)

Т.е. сделайте нормальные простые прозрачные структуры хранящие ваши данные, вот эта вся городьба list(map(list, zip( - это ужасно, не надо так делать.
doza_and
Tsunetomo
с задачей создать словарь ключи которого должны быть списками
Если коротко то такая задача неразрешима. Ключами могут быть ТОЛЬКО неизменяемые сущности.

Правильно вам говорят, придумайте нормальную структуру данных(по крайней мере возможную) для вашей программы.

Rafik
Если уж очень хочется видеть ключ как список, то тогда используйте кортеж. Он точно хешируемый объект и годится на роль ключа.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB