我有以下字典,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)
但是我希望通过增加年龄范围来排序列表。最简单的方法是什么?
答案 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)
由于这会在最后逐个弹出键,因此您将留下一个空字典,但如果您只是创建一个饼图,则无关紧要。