如何在Python中将dict元素值作为列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Python中将dict元素值作为列表相关的知识,希望对你有一定的参考价值。

我有一份清单。让我们说[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)
答案

你可以使用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]}
另一答案

你可以使用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]})
另一答案

这将是有效的,你正在寻找的关键是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]}
另一答案
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方法只在需要时创建新列表。

另一种方法可能是实现dict__missing__子类。只要没有密钥,就会调用此方法。

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

然后只是做d[item].append(index)。现在,无论何时找不到密钥,都会调用__missing__()来“修复”问题。另见How can I call __missing__ from dict

以上是关于如何在Python中将dict元素值作为列表的主要内容,如果未能解决你的问题,请参考以下文章

如何将列表作为字典的默认值? [复制]

在 Python 中将 .csv 值作为单个列表导入

如何在python中将列表拆分为没有重复元素的子集

在dict python中将多个值映射到一个

如何在python中将一维值列表转换为0和1的二维网格[重复]

在python中建立一组列表后,怎么从列表中提取元素