簡體   English   中英

如何將元組字典轉換為列表字典(Python)?

[英]How to convert a dictionary of tuples into a dictionary of lists (Python)?

我是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())

,您只需將maplist組合即可:

expect_iterable_of_lists(map(list, 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}

該代碼將實現您使用列表鍵的目標,並且只要您不對列表進行突變(基於哈希表的指令不適用於可變鍵),它就可以正常工作。 如果確實需要更改鍵,則需要一個不依賴散列的替代字典實現(例如, 關聯列表 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM