【问题标题】:How to convert dictionary of indices to list of keys?如何将索引字典转换为键列表?
【发布时间】:2026-01-29 08:25:02
【问题描述】:

假设您有一本字典,列出了每个唯一值出现的索引。例如,假设您的字母表只是 ab,那么这本字典将类似于:d = {'a': [1, 2, 6], 'b': [3, 7]}。我想将其转换为在正确索引处显示正确值的原始列表,例如在最后一个示例中,l = ['a','a','b',None,None,'a',b']。我更喜欢一个简单的小解决方案,而不是一个乏味的 for 循环。谢谢!

【问题讨论】:

  • 为什么任意限制无 for 循环? dict 和 list 理解也使用 for 循环!你自己试过了吗?
  • 没有“for”只是一种说法,快速而无需长代码。谢谢大家的帮助。

标签: python list dictionary indexing


【解决方案1】:

显然在没有for 循环的情况下这样做是一个糟糕的主意,因为最简单的方法是(它并不完美,但它可以完成工作):

r = {}
for key, value in d.items():
    for element in value:
        r[element] = key

l = [r.get(i) for i in xrange(1, max(r) + 1)]

但是,如果您真的想知道如何在没有任何for 的情况下执行此操作,请查看:

m = {}
i = 0
d_keys = d.keys()
max_value = 0
while i < len(d):
    d_i = d[d_keys[i]]
    j = 0
    while j < len(d_i):
        d_i_j = d_i[j]
        if max_value < d_i_j:
            max_value = d_i_j
        m[d_i_j] = d_keys[i]
        j += 1
    i += 1

l = []
i = 1
while i <= max_value:
    l.append(m.get(i))
    i += 1

这很容易,不是吗?

【讨论】:

    【解决方案2】:

    d.keys()

    键() 返回字典的键列表的副本。请参阅 dict.items() 的注释

    来自Python Docs

    【讨论】:

    • 你确定这能回答问题吗?
    【解决方案3】:

    我不知道你为什么需要它,但这是一个肮脏的答案,没有循环。

    d = {'a': [1, 2, 6], 'b': [3, 7]}
    
    map(lambda x: x[0] if x else None, map(lambda x: filter(lambda l: x in d[l], d), range(1, max(reduce(lambda x, y: x+y, map(lambda x:d[x], d)))+1)))
    

    【讨论】: