2014-10-14 2 views
-4

Скажите, что у вас есть словарь, содержащий индексы, в которых появляется каждое уникальное значение. Например, скажем, что алфавит равен a и b, тогда этот словарь будет выглядеть примерно так: d = {'a': [1, 2, 6], 'b': [3, 7]}. Я хотел бы преобразовать его в исходный список, который показывает в правом индексе правильное значение, например, в последнем примере l = ['a','a','b',None,None,'a',b']. Я предпочитаю простое маленькое решение, а не то, что утомительно для циклов. Спасибо!Как преобразовать словарь индексов в список ключей?

+4

Почему произвольное ограничение на нет для петель? диктовки и списки используют для циклов! Вы еще что-то пробовали? –

+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

Я не знаю, зачем вам это нужно, но вот грязный ответ, без петель.

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

Интересно, удовлетворяет ли это «простое» требование ...;) – piotrekw

0

d.keys()

ключи() Возвращает копию списка словаря ключей. См примечание для dict.items()

из Python Docs

+0

Вы уверены, что это отвечает на вопрос? – user189

Смежные вопросы