繁体   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