浏览字典并按顺序打印其值

时间:2010-09-08 16:42:19

标签: python dictionary printing sequence key

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

更新 我发现John的答案非常优雅。但是请允许我扩展Kugel的回应: 库格尔的方法回答了我的问题。但是我继续遇到另一个问题:函数总是会返回None和输出。原因:每当您没有从Python中的函数显式返回值时,将隐式返回None。我找不到明确归还手的方法。在库格尔的方法中我靠近了,但手仍然被埋在FOR循环中。

4 个答案:

答案 0 :(得分: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'
    

答案 1 :(得分:1)

你的##代码可能吗?

dispHand.append(letter)

<强>更新

要打印列表,请:

for item in dispHand:
    print item,

答案 2 :(得分:1)

没有嵌套循环的另一个选项

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

答案 3 :(得分:0)

使用

" ".join(sequence)

打印一个没有逗号和括号的序列。

如果序列中有整数或其他内容

" ".join(str(x) for x in sequence)