如何将元组字典转换为列表字典(Python)?

如何将元组字典转换为列表字典(Python)?,python,list,dictionary,tuples,Python,List,Dictionary,Tuples,一般来说,我对Python和编程不熟悉,但我有一个键为元组的字典,我想用这些键作为列表来创建一个新字典 我的意思是: 我有: d = {("apple", "banana", "pear", "pineapple"):24, ("banana", "pineapple", "apple", "pear"):17, ("pineapple", "pear", "banana", "apple"):10, ("apple", "pineapple", "banana", "pear"):16}

一般来说,我对Python和编程不熟悉,但我有一个键为元组的字典,我想用这些键作为列表来创建一个新字典

我的意思是:

我有:

d = {("apple", "banana", "pear", "pineapple"):24, 
("banana", "pineapple", "apple", "pear"):17,
("pineapple", "pear", "banana", "apple"):10,
("apple", "pineapple", "banana", "pear"):16} 
我想:

new_d = {["apple", "banana", "pear", "pineapple"]:24, 
["banana", "pineapple", "apple", "pear"]:17, 
["pineapple", "pear", "banana", "apple"]:10, 
["apple", "pineapple", "banana", "pear"]:16}

有没有一种简单的方法可以使用for循环和if语句来实现这一点?

列表是不可散列的,因此不能作为字典中的键

为什么要将密钥设置为列表?如果您当前正在调用函数

expect_iterable_of_lists(d.keys())
,您可以简单地组合地图和列表:


列表是不可散列的,因此不能是字典中的键

为什么要将密钥设置为列表?如果您当前正在调用函数

expect_iterable_of_lists(d.keys())
,您可以简单地组合地图和列表:


正如其他人所指出的,使用列表作为字典键可能不是一个好主意

如果这是您真正需要的,那么将哈希功能添加到列表并不难:

>>> class List(list):
        def __hash__(self):
            return hash(tuple(self))

>>> d = {("apple", "banana", "pear", "pineapple"):24, 
("banana", "pineapple", "apple", "pear"):17,
("pineapple", "pear", "banana", "apple"):10,
("apple", "pineapple", "banana", "pear"):16}

>>> new_d = {List(k):v for k, v in d.items()}
>>> new_d
{['banana', 'pineapple', 'apple', 'pear']: 17,
 ['apple', 'banana', 'pear', 'pineapple']: 24, 
 ['pineapple', 'pear', 'banana', 'apple']: 10, 
 ['apple', 'pineapple', 'banana', 'pear']: 16}

这段代码将实现您使用列表作为键的目标,只要您不改变基于哈希表的列表dict,它就可以正常工作,但不能很好地处理可变键。如果您确实需要对键进行变异,您将需要一个不依赖哈希的替代字典实现。例如。

正如其他人所指出的,使用列表作为字典键可能不是一个好主意

如果这是您真正需要的,那么将哈希功能添加到列表并不难:

>>> class List(list):
        def __hash__(self):
            return hash(tuple(self))

>>> d = {("apple", "banana", "pear", "pineapple"):24, 
("banana", "pineapple", "apple", "pear"):17,
("pineapple", "pear", "banana", "apple"):10,
("apple", "pineapple", "banana", "pear"):16}

>>> new_d = {List(k):v for k, v in d.items()}
>>> new_d
{['banana', 'pineapple', 'apple', 'pear']: 17,
 ['apple', 'banana', 'pear', 'pineapple']: 24, 
 ['pineapple', 'pear', 'banana', 'apple']: 10, 
 ['apple', 'pineapple', 'banana', 'pear']: 16}

这段代码将实现您使用列表作为键的目标,只要您不改变基于哈希表的列表dict,它就可以正常工作,但不能很好地处理可变键。如果您确实需要对键进行变异,那么您需要一个不依赖哈希的替代字典实现,例如。

列表不能是字典项的键。这里的最终目标是什么?也许有另一种方法可以解决您当前的问题,因为我不知道问题是什么。列表不能作为字典条目的键。这里的最终目标是什么?也许有另一种方法可以解决您当前的问题,因为我不知道问题是什么。更正确的说法是列表不可散列,因此不能与基于散列表的词典一起使用。您可以在字典中使用可变键,只需确保突变不会影响以后查找键的能力。更正确的说法是列表不可哈希,因此不能与基于哈希表的字典一起使用。您可以在字典中使用可变键,只需确保突变不会影响以后查找键的能力。