繁体   English   中英

如何将列表转换为以索引列表为值的字典?

[英]How to convert a list to a dictionary with list of indexes as values?

这个问题只对每个元素使用一个索引。 我正在尝试做同样的事情,但列表中有重复,所以 dict 中的值将是索引列表。

我有以下代码将列表简化为字典:

def list_to_dict(l):
    d = {}
    for i in range(len(l)):
        if l[i] not in d:
            d[l[i]] = []
        d[l[i]].append(i)

    return d

print(list_to_dict([1, 2, 3, 1]))
# Gives: {1: [0, 3], 2: [1], 3: [2]}

我可以知道是否有更pythonic/更有效的方法来做到这一点?

鉴于arr[i]代表节点i的父节点,您似乎正在尝试将 Tree 构造为邻接列表。 如果给你arr ,你可以使用下面的方式来构造邻接表。

from collections import defaultdict

def reduce_list_to_map(arr):
    adj = defaultdict(list)
    for i in range(len(arr)):
        adj[arr[i]].append(i)
    return adj

您可以只使用 dict 方法setdefault而不是检查密钥是否存在。 此外,与其循环索引,不如使用enumerate更简洁:

def list_to_dict(l):
    d = {}
    for i, val in enumerate(l):
        d.setdefault(val, []).append(i)

    return d

print(list_to_dict([1, 2, 3, 1]))
# Gives: {1: [0, 3], 2: [1], 3: [2]}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM