просматривая словарь и печатая его значения в последовательности

1
def display_hand(hand):
    for letter in hand.keys():
        for j in range(hand[letter]):
            print letter, 

Вернет что-то вроде: b e h q u w x. Это желаемый результат.

Как я могу изменить этот код, чтобы получить вывод только тогда, когда функция завершила свои циклы?

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

def display_hand(hand):
    dispHand = []
    for letter in hand.keys():
        for j in range(hand[letter]):
            ##code##
    print dispHand

UPDATE Ответ Джона очень изящный, я нахожу. Позвольте мне, однако, расширить o ответ Кугеля: Подход Кугель ответил на мой вопрос. Однако я продолжал сталкиваться с дополнительной проблемой: функция всегда возвращала None, а также вывод. Причина. Всякий раз, когда вы явно не возвращаете значение из функции в Python, None неявно возвращается. Я не мог найти способ явно вернуть руку. В подходе Kugel я подошел ближе, но рука все еще похоронена в цикле FOR.

Теги:
key
printing
dictionary
sequence

4 ответа

4
Лучший ответ

Вы можете сделать это в одной строке, объединив несколько понятий списка:

print ' '.join(letter for letter, count in hand.iteritems() for i in range(count))

Позвольте сломать это по частям. Я использую образец словаря, который имеет несколько счетчиков больше 1, чтобы показать, что часть повторения работает.

>>> hand
{'h': 3, 'b': 1, 'e': 2}
  • Получить буквы и числа в форме, которую мы можем перебрать.

    >>> list(hand.iteritems())
    [('h', 3), ('b', 1), ('e', 2)]
    
  • Теперь просто буквы.

    >>> [letter for letter, count in hand.iteritems()]
    ['h', 'b', 'e']
    
  • Повторяйте каждую букву count раз.

    >>> [letter for letter, count in hand.iteritems() for i in range(count)]
    ['h', 'h', 'h', 'b', 'e', 'e']
    
  • Используйте str.join, чтобы объединить их в одну строку.

    >>> ' '.join(letter for letter, count in hand.iteritems() for i in range(count))
    'h h h b e e'
    
  • 0
    сладкий :) Спасибо Джону за срыв, а также. делает хорошее обучение!
1

другой вариант без вложенного цикла

"".join((x+' ') * y for x, y in hand.iteritems()).strip()
1

Возможно, ваш ##-код?

dispHand.append(letter)

Обновление

Чтобы распечатать свой список, выполните следующие действия:

for item in dispHand:
    print item,
  • 0
    Привет Кугель, ваш ответ также ответил на мой вопрос. Однако я продолжал сталкиваться с дополнительной проблемой: функция всегда возвращала None, а также вывод. Причина: всякий раз, когда вы явно не возвращаете значение из функции в Python, None неявно возвращается. Я не мог найти способ явно вернуть руку. В вашем подходе рука все еще находится в цикле FOR.
0

Использование

" ".join(sequence)

для печати последовательности без запятых и прилагаемых скобок.

Если у вас есть целые числа или другие вещи в последовательности

" ".join(str(x) for x in sequence)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню