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