如何从有序字典中获取所有键?

16
def izracunaj_dohvatljiva_stanja(funkcije_prijelaza):
    dohvatljiva = []
    dohvatljiva.extend(pocetno_stanje)
    pomocna = collections.OrderedDict
    for i in xrange(len(dohvatljiva)):
        for temp in pomocna.keys(): <-----------------------------------this line
            if temp.split(',')[0] == dohvatljiva[i]:
                if funkcije_prijelaza.get(temp) not in dohvatljiva:
                    dohvatljiva.extend(funkcije_prijelaza.get(temp))
我试图从有序字典中获取所有键,以便可以迭代它,但在运行时出现了错误: 点击查看图片

pomocna('helper')从未被初始化,也没有键。 - roadrunner66
3个回答

25

虽然这是一个添加新答案的旧帖子,但当我遇到类似问题并搜索解决方案时,我来回答了这个问题。

以下是一种简单的方式,我们可以在Python 3(Python 3.6之前的版本)中对字典进行排序。

import collections


d={
    "Apple": 5,
    "Banana": 95,
    "Orange": 2,
    "Mango": 7
}

# sorted the dictionary by value using OrderedDict
od = collections.OrderedDict(sorted(d.items(), key=lambda x: x[1]))
print(od)
sorted_fruit_list = list(od.keys())
print(sorted_fruit_list)

输出:

OrderedDict([('Orange', 2), ('Apple', 5), ('Mango', 7), ('Banana', 95)])
['Orange', 'Apple', 'Mango', 'Banana']

更新:

从Python 3.6及以后的版本开始,我们可以按其值对字典进行排序。

d={
    "Apple": 5,
    "Banana": 95,
    "Orange": 2,
    "Mango": 7
}

sorted_data = {item[0]:item[1] for item in sorted(d.items(), key=lambda x: x[1])}
print(sorted_data)
sorted_fruit_list = list(sorted_data.keys())
print(sorted_fruit_list)

输出:

{'Orange': 2, 'Apple': 5, 'Mango': 7, 'Banana': 95}
['Orange', 'Apple', 'Mango', 'Banana']

8

你真是最有价值的球员。 - J. Krajewski

6
在Python中正确实例化对象的方法是这样的:
pomocna = collections.OrderedDict() # notice the parentheses! 

你正在给分配一个引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接