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

标签 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

更新 我发现约翰的回答非常优雅。然而,请允许我扩展 o Kugel 的回应: Kugel 的方法回答了我的问题。但是我一直遇到一个额外的问题:该函数将始终返回 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))
    'h h h b e e'
    

关于python - 遍历字典并按顺序打印其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669986/

相关文章:

python - Boto3 和 Python3 : Can't convert 'bytes' object to str implicitly

c# - 来自字典 C# 的数组

c# - 从 2 个匹配的字典中创建一个新字典

swift - 如何在没有行终止符的情况下快速打印字符数组

python - 使用 python 正则表达式编辑二进制文件/字符串

python - 如何在 3.7.1 上导入 pygame?

python - 值错误 : dictionary update sequence element #0 has length 3; 2 is required when attempting to coerce generator function into dictionary

java - 从网站将带照片的身份证打印到塑料证卡打印机

printing - 动态更改打印数据

python - python脚本在Windows中运行的用户是什么?