对于具有排序函数的语句,它是如何工作的

2024-04-23 16:22:38 发布

您现在位置:Python中文网/ 问答频道 /正文

vowels = ['a', 'e', 'i', 'o', 'u']
word = input("Provide a word to search for vowels: ")

found = {}

for letter in word:
    if letter in vowels:
        found.setdefault(letter, 0)
        found[letter] += 1

for k, v in sorted(found.items()):
    print(k, 'was found', v, 'time(s).')

我是Python和一般编程的初学者。输入“良好”时,发现输出“o”2次。代码运行良好,但最后一块代码让我困惑。变量k产生字母o,变量v产生数字2。这是字典里的钥匙。如何解释代码以产生此输出?你知道吗


Tags: to代码inforinputsearchifitems
1条回答
网友
1楼 · 发布于 2024-04-23 16:22:38

^{} function从输入中产生一个排序列表。这里的输入是^{} object,它本身是一个包含字典中(key, value)对的元组的iterable。由于元组是按字典顺序排列的(首先比较它们的第一个元素,如果相等,则比较第二个元素,等等),因此最终会得到按字母顺序排列的(key, value)对列表。你知道吗

您可以在交互式口译员中自己尝试:

>>> vowels = ['a', 'e', 'i', 'o', 'u']
>>> word = 'good'
>>> found = {}
>>> for letter in word:
...     if letter in vowels:
...         found.setdefault(letter, 0)
...         found[letter] += 1
...
0
1
>>> found
{'o': 2}
>>> list(found.items())
[('o', 2)]
>>> sorted(found.items())
[('o', 2)]

当然,由于good只包含一个o唯一的元音,所以没有什么可以排序的。只有一对(key, value)的排序列表不会显示顺序上的任何更改。你知道吗

如果你试着用一个更复杂的词,比如ultrarevolutionaries,你会得到一个更有趣的结果:

>>> word = 'ultrarevolutionaries'
>>> found = {}
>>> for letter in word:
...     if letter in vowels:
...         found.setdefault(letter, 0)
...         found[letter] += 1
...
0
0
0
0
1
0
1
1
1
1
>>> list(found.items())
[('u', 2), ('a', 2), ('e', 2), ('o', 2), ('i', 2)]
>>> sorted(found.items())
[('a', 2), ('e', 2), ('i', 2), ('o', 2), ('u', 2)]

项目首先是无序的,uaeoi不是按字母顺序排列的。aeiou另一方面。你知道吗

相关问题 更多 >