2016-06-16 20 views
0

Я хочу распаковать словарь и список в предложение. Например:Как перебирать словарь, используя для циклов?

newlist = [1, 2, 3, 4, 5, 6] 
new_dictionary = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1} 

Исходное предложение: 'My code is broken please help'. В списке показаны позиции, которые слова появляются в предложении. Словарь хранит слово и позицию, с которой ассоциируется слово.

Целью является повторение словаря до совпадения числа в списке. Как только это произойдет, ключ, соответствующий значению, добавляется в список. Это будет продолжаться до тех пор, пока в списке не останется больше номеров. Затем список преобразуется в строку и печатается пользователю.

Я предположил бы, что-то подобное было бы решение:

for loop in range(len(newlist)): 
    x = 0 
    for k,v in new_dictionary.items(): 
     if numbers[x] == v: 
       original_sentence.append(k) 
     else: 
       x = x + 1 

print(original_sentence) 

Однако код просто выводит пустой список. Есть ли способ переформулировки или переустановки циклов for, чтобы код работал?

+3

Почему бы не инвертировать словарь, чтобы он отображал положение слова вместо слова в положение? Тогда это тривиально. – jonrsharpe

+0

Каков фактический прецедент? Что должен делать этот код? Для чего вы это используете? Также, что вы подразумеваете под «Целью является итерация по словарю до совпадения числа в списке» – Keatinge

+0

Ваш код не будет работать вообще, поскольку 'original_sentence' и' numbers' не определены. Пожалуйста, разместите код _actual_, над которым вы работаете. – Selcuk

ответ

2

Я предполагаю, что вы не хотите, чтобы инвертировать словарь, так что вы можете попробовать что-то вроде этого:

dictionary = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1} 
numbers = [1, 2, 3, 4, 5, 6] 

sentence = [] 
for number in numbers: 
    for key in dictionary.keys(): 
     if dictionary[key] == number: 
      sentence.append(key) 
      break 
4

Инвертировать словарь и продолжить. Попробуйте следующий код.

>>> d = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1} 
>>> numbers = [1, 2, 3, 4, 5, 6] 
>>> d_inv = {v:k for k,v in d.items()} 
>>> ' '.join([d_inv[i] for i in numbers]) 
'my code is broken please help' 
1

отсортировали Dict с использованием значений.

import operator 
new_dictionary = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1} 
sorted_x = sorted(new_dictionary.items(), key=operator.itemgetter(1)) 
print ' '.join(i[0] for i in sorted_x) 

результат

'my code is broken please help' 

Весь код в одной строке.

In [1]: ' '.join([item[0] for item in sorted(new_dictionary.items(), key=operator.itemgetter(1))]) 
Out[1]: 'my code is broken please help' 
+0

Это отлично работает, но OP ищет предложение в порядке, определенном в списке с именем 'newlist = [1, 2, 3, 4, 5, 6]'. Это просто сортируется в этом примере. –

+0

@AbdulFatir Вы правы. Это работает только в том случае, если желаемый список в форме вступительного ордера. –

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