[英]Python - Easiest way to get ordered key/value pairs from dictionary?
我有以下字典age_freq:
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)
这个工作正常,我得到以下两个列表:
age_range = ['Age35-44', 'Age0-14', 'Age65-74', 'Age45-54', 'Age55-64', 'Age15-24', 'Age25-34']
freq = [194, 11, 12, 142, 51, 223, 310]
但是,我希望这些列表按年龄段增加排序。 最简单的方法是什么?
整理一下。
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))
我相信最Python化的方式是:
sortedFreq = [(key, age_freq[key]) for key in sorted(age_freq)]
我不知道它是否整洁高效,但是我认为有时可读性/可重用性很重要,因此我建议将其转换为字典列表:
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'))
但这可能不是“最简单”的方法。
Python的字典未排序,因此iteritems()将以与以前相同的“顺序”返回键和值
要创建有序的键/值列表,您可以执行以下操作:
for key in sorted(age_freq.keys()):
aKey = key
aValue = age_freq.pop(key)
age_range.append(aKey)
freq.append(aValue)
因为这样会在最后一键弹出键,所以您将得到一个空字典,但是如果您只是创建一个饼图,那就没关系了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.