如何将索引字典转换为键列表?

时间:2014-10-14 14:57:34

标签: python list dictionary indexing

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

3 个答案:

答案 0 :(得分:2)

显然,在没有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

这很容易,不是吗?

答案 1 :(得分:1)

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

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)))

答案 2 :(得分:0)

运行起来也()

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

的注释

来自Python Docs