[英]going through a dictionary and printing its values in sequence
def display_hand(hand):
for letter in hand.keys():
for j in range(hand[letter]):
print letter,
將返回類似以下內容: behquwx
。 這是所需的輸出。
僅當函數完成循環后,如何才能修改此代碼以獲取輸出?
像下面的代碼這樣的問題給我帶來了麻煩,因為在打印輸出時我無法擺脫諸如逗號和單引號的字典元素:
def display_hand(hand):
dispHand = []
for letter in hand.keys():
for j in range(hand[letter]):
##code##
print dispHand
更新我發現約翰的回答非常優雅。 不過,請允許我擴大o庫格爾的回答:庫格爾的方法回答了我的問題。 但是我一直遇到另一個問題:函數將始終返回None以及輸出。 原因:每當您不從Python中的函數顯式返回值時,都將隱式返回None。 我找不到明確地退回手的方法。 在Kugel的方法中,我走得更近,但手仍埋在FOR循環中。
您可以通過結合幾個列表推導來在一行中完成此操作:
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)) 'hhhbee'
您的##代碼?
dispHand.append(letter)
更新 :
然后打印列表:
for item in dispHand:
print item,
沒有嵌套循環的另一種選擇
"".join((x+' ') * y for x, y in hand.iteritems()).strip()
采用
" ".join(sequence)
打印不帶逗號和括號的序列。
如果序列中有整數或其他內容
" ".join(str(x) for x in sequence)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.