我是一个python新手,但我正在尝试迭代以下的dicts列表:
MonthEngList = [{'MonthNumber': 1, 'MonthName': 'January'},
{'MonthNumber': 2, 'MonthName': 'February'}, {'MonthNumber': 3, 'MonthName': 'March'},
{'MonthNumber': 4, 'MonthName': 'April'}, {'MonthNumber': 5, 'MonthName': 'May'},
{'MonthNumber': 6, 'MonthName': 'June'}, {'MonthNumber': 7, 'MonthName': 'July'},
{'MonthNumber': 8, 'MonthName': 'August'}, {'MonthNumber': 9, 'MonthName': 'September'},
{'MonthNumber': 10, 'MonthName': 'October'}, {'MonthNumber': 11, 'MonthName': 'November'},
{'MonthNumber': 12, 'MonthName': 'December'}]
我正在使用它作为matplotlib中带有自动收报机的情节的标签,但不知何故,这几个月被干预了。 我确实知道我应该使用sorted()..但我似乎无法绕过它。
这是我做的:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
fig = plt.figure()
ax = fig.gca()
pos_list_mm = np.arange(1,12)
ax.yaxis.set_major_locator(ticker.FixedLocator((pos_list_mm)))
ax.yaxis.set_major_formatter( ticker.FixedFormatter(
sorted(MonthEngList,key=MonthEngList('MonthName') ) ) )
plt.show()
plt.draw()
屈服:
Traceback (most recent call last):
File "vectorialbox_with_save.py", line 135, in <module>
ax.yaxis.set_major_formatter( ticker.FixedFormatter( sorted(MonthEngList,key=MonthEngList('MonthName') ) ) )
TypeError: 'list' object is not callable
有关如何正确执行此操作的任何提示?
答案 0 :(得分:1)
当您调用sorted()时,该函数期望MonthEngList成为字典。 MonthEngList实际上是一个字典列表。尝试单独运行MonthEngList(&#39; MonthName&#39;),你会得到相同的列表不是可调用的对象错误。
尝试将您的月份放入如下字典:
MonthEngList = {'MonthName':[Jan,...,Dec],'MonthNum':[1,...12]}
答案 1 :(得分:0)
就排序词典列表而言,这是解决方案:
lst=map(lambda x:x.items(),MonthEngList)
此代码将字典列表转换为元组列表列表(字典中的键,值对),因此这将导致:
lst=[[('MonthNumber', 1), ('MonthName', 'January')], [('MonthNumber', 2), ('MonthName', 'February')], [('MonthNumber', 3), ('MonthName', 'March')], [('MonthNumber', 4), ('MonthName', 'April')], [('MonthNumber', 5), ('MonthName', 'May')], [('MonthNumber', 6), ('MonthName', 'June')], [('MonthNumber', 7), ('MonthName', 'July')], [('MonthNumber', 8), ('MonthName', 'August')], [('MonthNumber', 9), ('MonthName', 'September')], [('MonthNumber', 10), ('MonthName', 'October')], [('MonthNumber', 11), ('MonthName', 'November')], [('MonthNumber', 12), ('MonthName', 'December')]]
接下来,基于每个列表的第二个元组的第二个元素对列表列表进行排序,这可以通过以下方式完成:
y=sorted(lst,key=lambda x:x[1][1])
最后从排序结果中的每个列表中提取第一个元组的第二个元素,这是通过以下代码实现的:
desired_list= map(lambda x:x[0][1],y)
答案 2 :(得分:0)
你应该能够过几个月,因为它们已经按排序顺序排列(即
ax.yaxis.set_major_formatter(ticker.FixedFormatter(
[x['MonthName'] for x in MonthEngList]))
我们使用列表推导从每个列表条目中仅提取MonthName
。如果由于某种原因你确实需要对月份进行排序,你可以使用
ax.yaxis.set_major_formatter(ticker.FixedFormatter(
[x['MonthName'] for x in sorted(MonthEngList, key=lambda y: y['MonthNumber'])]))
我们再次使用列表推导来获取月份名称,但我们首先根据每个列表条目的MonthNumber
对列表进行排序。