【问题标题】:Sort Dict by order in list (python)按列表中的顺序对字典进行排序(python)
【发布时间】:2018-11-27 23:56:17
【问题描述】:

我正在尝试将 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]

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

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

我希望做的是在list 中按顺序订购df,所以我希望输出为:

         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

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

【问题讨论】:

  • Numpy.histogram2d?
  • 创建和归还垃圾箱?
  • 然后进行分箱
  • 我不想让读者感到困惑。 bins 是不规则尺寸。基本上是两个arcs。传统网格不适用

标签: python pandas dictionary ordereddictionary


【解决方案1】:

跳过熊猫部分

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

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

如果您需要重新排序 dict 并保留它的顺序,那么您需要对 bin 进行排序(根据您的要求),然后将其传递给有序的 dict

例如;如果你想对key上的bins进行排序,

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

【讨论】:

    猜你喜欢
    • 2018-10-24
    • 1970-01-01
    • 2023-04-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多