遍历字典并按顺序打印其值
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}
首先,获取字母和计数,以便我们可以逐个处理。
>>> 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'