按列表中的顺序排序Dict(python)

时间:2018-06-19 05:40:37

标签: python pandas dictionary ordereddictionary

我试图将dict转换为有序的dfdict代表scatter plot,显示各种bins中的坐标。

让我们说x,y lists如下:

x = [10,40,33,44,66,77,33,44,55,2]
y = [1,4,53,34,56,47,83,44,25,12]

我将坐标分类到适当的箱子中,输出为:

bins =({
        1: [(10, 1), (2, 12)], 
        2: [(40, 4), (33, 53), (44, 34), (33, 83), (44, 44)], 
        3: [(66, 56), (55, 25)], 
        4: [(77, 47)]
        })

如果我转换为df:

df = pd.DataFrame.from_dict(bins, orient = 'index')
d = df.transpose()

输出:

         1         2         3         4
0  (10, 1)   (40, 4)  (66, 56)  (77, 47)
1  (2, 12)  (33, 53)  (55, 25)      None
2     None  (44, 34)      None      None
3     None  (33, 83)      None      None
4     None  (44, 44)      None      None

我希望做的是在df按订单排序list,所以我希望输出为:

         1          2        3        4
0   (10, 1)         
1              (40, 4)      
2             (33, 53)          
3             (44, 34)      
4                               (66, 56)
5                               (77, 47)
6             (33, 83)      
7             (44, 44)      
8                      (55, 25) 
9   (2, 12)         

我不确定是否可以这样做。所以我想尝试为每个索引处的每个散点点返回bin号:

   Bin
0    1
1    2
2    2
3    2
4    4
5    4
6    2 
7    2
8    3
9    1

我已尝试collections.OrderedDict,但我需要按索引排序,而不是keys

我不确定我是否可以将输入列为列表?

1 个答案:

答案 0 :(得分:1)

跳过pandas部分

b = collections.OrderedDict(bins) #Resort by order in list

collections.OrderedDict不对构造函数中给出的值进行排序。它只是保留了创建字典的顺序。

如果你需要重新订购字典并保留它的顺序,那么你需要对箱子进行排序(根据你的要求),然后将其传递给有序的词典

作为例子;如果您想对密钥上的bins进行排序,

b = collections.OrderedDict()
for k in sorted(bins):
    b[k] = bins[k]