簡體   English   中英

瀏覽字典並按順序打印其值

[英]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}
  1. 以可以迭代的形式獲取字母和計數。

     >>> list(hand.iteritems()) [('h', 3), ('b', 1), ('e', 2)] 
  2. 現在只是字母。

     >>> [letter for letter, count in hand.iteritems()] ['h', 'b', 'e'] 
  3. 重復每個字母count次數。

     >>> [letter for letter, count in hand.iteritems() for i in range(count)] ['h', 'h', 'h', 'b', 'e', 'e'] 
  4. 使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM