遍历字典并按顺序打印其值

1 投票
4 回答
1859 浏览
提问于 2025-04-16 03:51
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

更新 我觉得约翰的回答非常优雅。不过,我想进一步补充一下Kugel的回答:Kugel的方法解决了我的问题。但我还遇到了一个额外的问题:这个函数总是返回None和输出。原因是:在Python中,如果你没有明确地从函数中返回一个值,默认会返回None。我找不到一种方法来明确返回结果。在Kugel的方法中,我离目标更近了,但结果还是被埋在了一个FOR循环里。

4 个回答

1

另一种不使用嵌套循环的选择

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

你的代码可能是这样的?

dispHand.append(letter)

更新

如果你想打印你的列表,可以这样做:

for item in dispHand:
    print item,
3

你可以通过结合几个列表推导式,一行代码就能完成这个操作:

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))
    'h h h b e e'
    

撰写回答