簡體   English   中英

如何在Python中將dict元素值作為列表

[英]How to make dict element value as list in Python

我有一份清單。 讓我們說[3,4,2,3,4,2,1,4,5]

我需要從元素的索引創建一個字典。

在這種情況下,我需要創建一個dict,如下所示:

{
   '3':[0,3],
   '4':[1,4,7],
   '2':[2,5],
   '1':[6],
   '5':[8]
}

其中元素值是提供的列表中鍵的索引。

我試過了。 但是只能將值更改為整數。 但無法將它們列為清單。

有沒有辦法只用1 for循環?

我試過的代碼:

d=dict()
ll=[1,2,1,2,1,2,3,4,5,5,4,2,4,6,5,6,78,3,2,4,5,7,8,9,4,4,2,2,34,5,6,3]
for i,j in enumerate(ll):
    d[j].append(i)
print(d)

您可以將collections.defaultdictenumerate用於O(n)解決方案:

from collections import defaultdict

d = defaultdict(list)

A = [3,4,2,3,4,2,1,4,5]

for idx, val in enumerate(A):
    d[val].append(idx)

print(d)

defaultdict(list, {1: [6], 2: [2, 5], 3: [0, 3], 4: [1, 4, 7], 5: [8]})
mylist = [3, 4, 2, 3, 4, 2, 1, 4, 5]
d = {}
for index, item in enumerate(mylist):
    d.setdefault(item, []).append(index)

結果是

{3: [0, 3], 4: [1, 4, 7], 2: [2, 5], 1: [6], 5: [8]}

為什么? 好吧,我們遍歷列表,對於每個項目,我們首先確保該項目映射到的字典中有一個列表。 然后我們將相應的索引附加到該列表。 結果是一個字典,它將每個看到的項目映射到它所找到的索引列表。

該解決方案類似於jpp的解決方案,除了.setdefault()部分,它在每個循環運行中創建一個空列表,而defaultdict方法只在需要時創建新列表。

另一種方法可能是實現__missing__dict子類。 只要沒有密鑰,就會調用此方法。

class ListDict(dict):
    def __missing__(self, key):
        l = []
        self[key] = l
        return l

然后只做d[item].append(index) 現在,無論何時找不到密鑰,都會調用__missing__()來“修復”問題。 另請參閱如何從dict調用__missing__

這將是有效的,你正在尋找的關鍵是enumerate()函數:

list_to_convert = [3,4,2,3,4,2,1,4,5]
out_dict = {}

for idx, val in enumerate(list_to_convert):
    if val in out_dict:
        out_dict[val].append(idx)
    else:
        out_dict[val] = [idx,]

print (out_dict)

得到:

{3: [0, 3], 4: [1, 4, 7], 2: [2, 5], 1: [6], 5: [8]}

你可以使用set

d = [3,4,2,3,4,2,1,4,5]
new_d = {i:[c for c, a in enumerate(d) if i == a] for i in set(d)}

輸出:

{1: [6], 2: [2, 5], 3: [0, 3], 4: [1, 4, 7], 5: [8]}

暫無
暫無

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

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