Python:集合的输出顺序

Python:集合的输出顺序,python,Python,下面是我的代码: import heapq sentences_scores = {'Fruit': 6, 'Apple': 5, 'Vegetables': 3, 'Cabbage': 9, 'Banana': 1} summary = heapq.nlargest(3, sentences_scores, key = sentences_scores.get) text = "" for sentence in summary: text = text + sentence +

下面是我的代码:

import heapq

sentences_scores = {'Fruit': 6, 'Apple': 5, 'Vegetables': 3, 'Cabbage': 9, 'Banana': 1}

summary = heapq.nlargest(3, sentences_scores, key = sentences_scores.get)

text = ""
for sentence in summary:
    text = text + sentence + ' '
print(text)
我得到输出:

Cabbage Fruit Apple
但我想得到输出:

Fruit Apple Cabbage

我该怎么做呢?

首先,你的字典没有顺序,所以你不能得到相同的顺序;这种秩序实际上并不存在。正如评论所说,请改用
OrderedDict

此外,如果您使用的是水果,请不要将变量命名为
句子
:P

import heapq
from collections import OrderedDict

fruit_scores = OrderedDict([('Fruit', 6), ('Apple', 5), ('Vegetables', 3), ('Cabbage', 9), ('Banana', 1)])

best_fruit = heapq.nlargest(3, sentences_scores, key = sentences_scores.get)

best_fruit_scores = OrderedDict((fruit, score)
    for fruit, score in fruit_scores.items() if fruit in best_fruit)
# => OrderedDict([('Fruit', 6), ('Apple', 5), ('Cabbage', 9)])

best_fruit_names = [fruit
    for fruit in fruit_scores if fruit in best_fruit]
# => ['Fruit', 'Apple', 'Cabbage']

首先,你的字典没有顺序,所以你不能得到相同的顺序;这种秩序实际上并不存在。正如评论所说,请改用
OrderedDict

此外,如果您使用的是水果,请不要将变量命名为
句子
:P

import heapq
from collections import OrderedDict

fruit_scores = OrderedDict([('Fruit', 6), ('Apple', 5), ('Vegetables', 3), ('Cabbage', 9), ('Banana', 1)])

best_fruit = heapq.nlargest(3, sentences_scores, key = sentences_scores.get)

best_fruit_scores = OrderedDict((fruit, score)
    for fruit, score in fruit_scores.items() if fruit in best_fruit)
# => OrderedDict([('Fruit', 6), ('Apple', 5), ('Cabbage', 9)])

best_fruit_names = [fruit
    for fruit in fruit_scores if fruit in best_fruit]
# => ['Fruit', 'Apple', 'Cabbage']
返回已排序的列表

等价于:排序(iterable,key=key,reverse=True)[:n]

要按原始顺序获取列表,可以在dict上迭代以查找结果中的元素

original_order = [key for key in sentences_scores.keys() if key in summary] # ['Fruit', 'Apple', 'Cabbage']
返回已排序的列表

等价于:排序(iterable,key=key,reverse=True)[:n]

要按原始顺序获取列表,可以在dict上迭代以查找结果中的元素

original_order = [key for key in sentences_scores.keys() if key in summary] # ['Fruit', 'Apple', 'Cabbage']

@克丽丝,我想他想按顺序来排序dictionary@U10-我明白了。Thx:)。因此,这是一个
OrderedDict
question@Chris我想他想按顺序来排序dictionary@U10-我明白了。Thx:)。因此,这是一个
OrderedDict
question@AmadanPython 3.6及更新版本。@Amadan Python 3.6及更新版本。