【问题标题】:Why does my python dict become unordered? [duplicate]为什么我的 python dict 变得无序? [复制]
【发布时间】:2014-03-06 05:47:30
【问题描述】:

我正在使用它来生成在几年内以某个字母开头的名称百分比图。在绘制(和打印)我的字典(letter_d)时,键是无序的,而不是像它们添加到字典那样是连续的。有没有办法解决这个问题,我相信我正在按顺序将它们添加到字典中。如果没有,我可以创建连接散点图的点以模拟正确的线图吗?

import csv
import matplotlib.pyplot as plt 

start = 1880
stop = 1890
x = []
years = range(start, stop +1)
print years
letter_d = {}
year_d = {}
alphabet = ['Z']#,'C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

for i in alphabet:
    letter_d[i] = 0

for year in years:
    filename = 'yob' + str(year) + '.txt'
    z = open(filename)      
    year_d[int(year)] = 0
    letter_d[i] = year_d
    c = 0
    d = 0
    for line in z:
        y = line.strip().split(',')
        y.remove(y[1])
        c += int(y[1])
        if i in y[0]:
            d += int(y[1])
        year_d[year] = float(d)/float(c)            
        #x.append(y)
#print year_d
print year_d.keys()
plt.plot(year_d.keys(), year_d.values())
plt.show()

【问题讨论】:

  • Python 字典总是无序。
  • 使用来自collectionsOrderedDict

标签: python dictionary matplotlib data-modeling


【解决方案1】:

Python 字典总是无序的。

在您的情况下,您根本不需要字典。使用两个列表;一个是您已经从某个范围生成的years 列表,另一个是计算值:

year_values = []

for year in years:
    # ...
    year_values.append(float(d)/float(c))

plt.plot(years, year_values)

【讨论】:

  • 这让我的工作更加清晰,谢谢。
【解决方案2】:

正如所说的字典是无序的。 为了保持你的代码,有一种方法可以显示你的情节排序。 对字典键进行排序。

if __name__ == "__main__":
    year_d = {"5": 'b', "3": 'c', "4": 'z', "1":'a'}
    print year_d.keys()
    keys = map(int, year_d.keys())
    keys = map(keys.sort(), keys)
    print keys

原文: ['1', '3', '5', '4'] 排序: [1、3、4、5]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多