Python - 从字典中获取有序键/值对的最简单方法?

时间:2016-03-09 21:51:55

标签: python dictionary

我有以下字典,age_freq:

func searchBarShouldBeginEditing(searchBar: UISearchBar) -> Bool {
    searchBar.tintColor = UIColor.redColor()
    return true
}

我想从此字典中返回键/值对,以便创建饼图。我的代码如下:

age_freq = {'Age35-44': 194, 'Age0-14': 11, 'Age55-64': 51, 'Age45-54': 142, 'Age65-74': 12, 'Age15-24': 223, 'Age25-34': 310}

这很好用,我得到以下两个列表:

age_range=[]
freq=[]

for key, value in age_freq.iteritems():
    aKey = key
    aValue = value
    age_range.append(aKey)
    freq.append(aValue)

但是我希望通过增加年龄范围来排序列表。最简单的方法是什么?

4 个答案:

答案 0 :(得分:2)

只需对其进行排序。

age_range, freq = zip(*sorted(age_freq.items()))

如果年龄范围不那么整洁,如评论中所述,您可以明确地提取它们,例如,将每个范围的低端和高端转换为整数,然后找到它们的平均值:

age_range, freq = zip(*sorted(age_freq.items(), key=lambda x: (int(x[3].split('-')[0]) + int(x[3].split('-')[1]) / 2))

答案 1 :(得分:1)

我认为最蟒蛇的做法是:

sortedFreq = [(key, age_freq[key]) for key in sorted(age_freq)]

答案 2 :(得分:0)

我不知道它是否非常整洁有效但我认为有时可读性/可重用性很重要因此我建议将其转换为字典列表:

age_freq = {'Age35-44': 194, 'Age0-14': 11, 'Age55-64': 51, 'Age45-54': 142, 'Age65-74': 12, 'Age15-24': 223, 'Age25-34': 310}

table = [{'start': int(key.split('Age')[1].split('-')[0]),
          'stop': int(key.split('Age')[1].split('-')[1]),
          'freq': age_freq[key]}
         for key in age_freq]

现在你可以用它做任何你喜欢的事情:按开始年龄排序

import operator
sorted(table, key=operator.itemgetter('start'))

按停止年龄排序

sorted(table, key=operator.itemgetter('start'))

按频率排序

sorted(table, key=operator.itemgetter('freq'))

但那可能不是最简单的"方式。

答案 3 :(得分:-1)

Python的字典不是有序的,因此iteritems()将以与之前相同的“顺序”返回键和值

要创建有序的键/值列表,您可以执行以下操作:

for key in sorted(age_freq.keys()):
    aKey = key
    aValue = age_freq.pop(key)

    age_range.append(aKey)
    freq.append(aValue)

由于这会在最后逐个弹出键,因此您将留下一个空字典,但如果您只是创建一个饼图,则无关紧要。