2016-10-28 3 views
1

У меня есть список кортежей, File2, что его значение, как показано ниже:список кортежей в качестве ключа словаря в Python

(1,2,[3,4],2) 
    (3,5,[2,3,4,5,6,7],3) 

У меня также есть кадр данных, который имеет столбец с именем «графа», и я хочу построить словарь, который есть мой список кортежей в качестве ключа и столбец «Count» в качестве значения:

File3 = dict(zip(File2,df.Count)) 

Но я получаю эту ошибку:

unhashable type: 'list' 

Не могли бы вы рассказать мне, как я могу решить эту проблему?

+0

Простым обходным путем является использование 'str (your_key)' в качестве фактического ключа. –

ответ

3

[3,4] в (1,2,[3,4],2) есть список. Списки не хешируются, и только хешируемые объекты могут быть ключами словарей. Чтобы включить все списки в кортежи, вы можете написать функцию, как

def make_tuples(l): 
    return tuple(make_tuples(i) if isinstance(i,list) else i for i in l) 

выше терпит неудачу, если есть кортеж, который содержит кортеж, который содержит список. Вероятно, это не произойдет, но в таком случае сделайте

from collections.abc import Sequence 
def make_tuples(l): 
    return tuple(make_tuples(i) if isinstance(i, Sequence) else i for i in l) 
+1

Если производительность является проблемой, и вы уверены, что в списке есть только один уровень глубокого изменения, возвращаем в 'return tuple (tuple (i) if isinstance (i, list) else i for i in l)' –

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