天道酬勤,学无止境

sorting

How to sort a dictionary by two elements, reversing only one

问题 考虑以下字典: data = {'A':{'total':3}, 'B':{'total':5}, 'C':{'total':0}, 'D':{'total':0}, } 以上所需的顺序是 B、A、C、D。按总降序排列,然后按升序键。 当我调用sorted(data, key=lambda x: (data[x]['total'], x), reverse=True)我得到 B,A,D,C 因为在两个键上都调用了 reverse 。 有没有有效的方法来解决这个问题? 回答1 对负数进行排序,这将使总数反向排列,而无需使用reverse=True 。 然后按正序在密钥上打破关系: sorted(data, key=lambda x: (-data[x]['total'], x)) 演示: >>> data = {'A':{'total':3}, ... 'B':{'total':5}, ... 'C':{'total':0}, ... 'D':{'total':0}, ... } >>> sorted(data, key=lambda x: (-data[x]['total'], x)) ['B', 'A', 'C', 'D'] 此技巧仅适用于排序键中的数字组件; 如果您有多个键需要更改非数字的排序方向,则必须进行多遍排序(多次排序,从最后一个键到第一个键): # when

2022-07-11 09:53:03    分类:技术分享    python   sorting   dictionary

Identify start and end of arc out of three points/angles

问题 我知道三个点在一个圆上,它们代表弧的开始、中间和结束( a , m和b )。 我也有这些点的角度,从正 X 轴逆时针方向,使用从中心到点的三个相应向量的atan2(y,x) ,所以我们有-pi < theta < pi 。 我也知道哪些点是m ,我想知道的是a和b中的哪一个是弧的顺时针端。 我可以看到有 8 种方式可以排列点: "East" "West" "East" 0 -pi | pi 0 ---------------+------------- a m b | a m | b a | m b | a m b b m a | b m | a b | m a | b m a 其中前四个将a作为“结束”,将b作为“开始”,而后四个则相反。 请记住,约可以在 0 处环绕并出现在右侧或左侧,因此符号没有帮助。 有没有一种简洁的方法来确定哪个是起点,哪个是终点? 除了在一个大而密集的 if/else-if 块中费力地检查 8 个选项中的每一个之间的相对值之外,就是这样。 实现语言是 Python,但这不是特定于语言的问题! 回答1 如果m在从a到b的有向线段的左侧,则a为逆时针端; 否则,顺时针结束。 即取向量ab的左垂线,求其与am的点积。 如果点积为正,则 a 是 CCW 端点。 顺便说一句,处理角度最简洁的方法是避免使用它们。 一周中的任何一天

2022-07-11 09:38:41    分类:技术分享    algorithm   sorting   geometry   geometric-arc

Sort list of dictionaries by multiple keys with different ordering

问题 我需要对这个字典列表进行排序: [ {K: 1, B: 2, A: 3, Z: 4, ... } , ... ] 订购应为: K - 下降 B - 下降 A - 上升 Z - 上升 我只发现了如何按升序或降序对所有键进行排序( reverse=True ): stats.sort(key=lambda x: (x['K'], x['B'], x['A'], x['Z'])) 任何人都可以帮忙,如何按不同的键排序? 回答1 如果你有数字作为值,你可以使用这个: stats.sort(key=lambda x: (-x['K'], -x['B'], x['A'], x['Z'])) 对于一般值: stats.sort(key=lambda x: (x['A'], x['Z'])) stats.sort(key=lambda x: (x['K'], x['B']), reverse=True)

2022-07-11 09:35:52    分类:技术分享    python   list   sorting   python-2.7   dictionary

PHP Array Complex Sort

问题 我有一个已生成的复杂数组,我正在尝试按['file_date']对其进行排序。 降序。 这里是: Array ( ['images'] => Array ( ['93-1138446.jpg'] => Array ( ['file_title'] => '93-1138446', ['file_path'] => 'gallery-images-1435/93-1138446.jpg', ['thumb_path'] => 'resources/cache/275x275-75-d3cc92863d4f10bb6cf733159689a0e660fe5847df52beb531fa45b584876f0b.jpg', ['file_date'] => '1497471649' ), ['93-8315415.jpg'] => Array ( ['file_title'] => '93-8315415', ['file_path'] => 'gallery-images-1435/93-8315415.jpg', ['thumb_path'] => 'resources/cache/275x275-75-76a8495b1514b8385f090381edf21f64a6c71d2f15c14e0eadabbfce2824fe9a.jpg', ['file_date'] =>

2022-05-17 04:25:03    分类:技术分享    php   arrays   sorting

Order a data frame programmatically using a character vector of column names

问题 我正在尝试在多列上订购数据框。 并且列名是通过变量传递的,即一个字符向量。 df <- data.frame(var1 = c("b","a","b","a"), var2 = c("l","l","k","k"), var3 = c("t","w","x","t")) var1 var2 var3 1 b l t 2 a l w 3 b k x 4 a k t 使用变量对一列进行排序 sortvar <- "var1" df[order(df[ , sortvar]),] var1 var2 var3 2 a l w 4 a k t 1 b l t 3 b k x 现在,如果我想按两列排序,上述解决方案不起作用。 sortvar <- c("var1", "var2") df[order(df[, sortvar]), ] #does not work 我可以使用列名手动排序: df[with(df, order(var1, var2)),] var1 var2 var3 4 a k t 2 a l w 3 b k x 1 b l t 但是,如何使用具有列名的变量在多列上动态排序数据框? 我知道plyr和dplyr arrange功能,但我想在这里使用base R。 回答1 order需要多个排序变量作为单独的参数,这在您的情况下很不幸,但建议使用直接解决方案:使用 do

2022-05-16 22:24:10    分类:技术分享    r   dataframe   sorting

sorting pandas dataframe with inf and NaN

问题 我有一个熊猫数据框,我想按列的降序排序。 Name count AAAA -1.1 BBBB 0 CCCC -10 DDDD inf EEEE 3 FFFF NaN GGGG 30 我想按降序排序计数并将inf和NaN行移到最后。 df.sort('count',ascending = False,na_position="last")将NaN推到最后。 如何处理inf ? 回答1 with pd.option_context('mode.use_inf_as_null', True): df = df.sort_values('count', ascending=False, na_position='last') df Out: Name count 6 GGGG 30.000000 4 EEEE 3.000000 1 BBBB 0.000000 0 AAAA -1.100000 2 CCCC -10.000000 3 DDDD inf 5 FFFF NaN 回答2 In [33]: df.assign(x=df['count'].replace(np.inf, np.nan)) \ .sort_values('x', ascending=False) \ .drop('x', 1) Out[33]: Name count 6 GGGG 30.000000 4 EEEE

2022-05-16 14:08:04    分类:技术分享    sorting   pandas   dataframe

javaFX:move shapes with absolute coordinates using translatetransition

问题 我正在使用 javaFX 实现合并排序动画。 我想使用绝对坐标来移动形状。 我使用 Translatetransition() 的setToX()和setToY() Translatetransition() 。 但是,这些形状位于具有固定间距的 HBox 中。 我尝试将它们移动到不同的地方,但它不起作用。 setToX()和setToY()使用 HBox 作为参考。 形状始终具有固定的间距,并且形状的顺序不会改变。 我使用getLayoutX()和getLayoutY()来获取绝对坐标。 谁能帮我?? 这些是相关代码: HBox hBox = new HBox(20); hBox.setAlignment(Pos.CENTER); hBox.setPadding(new Insets(0,0,0,0)); ArrayList<StackPane> list = new ArrayList<>(); Random random = new Random(5); for (int i = 0; i < 12; i++) { int num = random.nextInt(10); Rectangle rectangle = new Rectangle(40, (num * 10) + 50); rectangle.setFill(Color.valueOf("#0000FF"

2022-05-16 12:58:05    分类:技术分享    java   sorting   animation   javafx

How to sort an NSArray with nested NSArray

问题 我有一个NSArray NSArray实例。 内部数组仅包含NSString的实例。 我需要按选定索引按字母顺序对嵌套数组进行排序。 例如 @[ @[@"test",@"B",@"test2"], @[@"bla",@"A",@"bla"], @[@"xyz",@"C",@"123"] ] 用户选择索引 1,升序排序。 结果应该是: @[ @[@"bla",@"A",@"bla"], @[@"test",@"B",@"test2"], @[@"xyz",@"C",@"123"] ] 回答1 您可以使用sortedArrayUsingComparator : NSArray *array = @[@[@"test",@"B",@"test2"], @[@"bla",@"A",@"bla"], @[@"xyz",@"C",@"123"]]; NSInteger index = 1; NSArray *sorted = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { return [obj1[index] compare:obj2[index] options:NSCaseInsensitiveSearch]; }]; 显然

2022-05-16 10:35:08    分类:技术分享    objective-c   sorting   nsarray

Trying to sort array by numbers first and then letters last

问题 我正在尝试对数组进行排序。 我正在尝试按“itemCommodity”排序。 我只需要先按数字排序,然后再按字母排序。 例如: 1000 A120 B330 2020 J954 5000 应显示为: 1000 2020 5000 A120 B330 J954 我希望有人可以帮助我解决这个问题。 我有一个我在下面尝试的示例,但它没有按预期工作。 var product_data = [{ "itemCommodity": "1000", }, { "itemCommodity": "B330", }, { "itemCommodity": "A120", }, { "itemCommodity": "J954", }, { "itemCommodity": "5000", }, { "itemCommodity": "2020", }] product_data.sort(function(a, b) { return a.itemCommodity - b.itemCommodity; }); 请注意 itemCommodity 不是数组中的唯一对象。 我有大约 40 个不同的对象,只是想对 itemCommodity 进行排序。 回答1 首先对不包含任何字母的元素进行排序。 然后 - 对其余的比较他们的第一个字符进行排序。 var product_data = [{a

2022-05-16 07:59:17    分类:技术分享    javascript   arrays   sorting

How to replace numbers with order in (python) list

问题 我有一个包含整数的列表并想要替换它们,以便以前包含最高数字的元素现在包含 1,第二大数字设置为 2,等等。 示例: [5, 6, 34, 1, 9, 3]应该产生[4, 3, 1, 6, 2, 5] 。 我个人只关心前 9 个最高的数字,因为我认为可能有一个简单的算法甚至可能是一个 python 函数来处理这个任务? 编辑:我不在乎如何处理重复项。 回答1 一种快速的方法是首先生成元素及其位置的元组列表: sort_data = [(x,i) for i,x in enumerate(data)] 接下来我们对这些元素进行reverse排序: sort_data = sorted(sort_data,reverse=True) 生成(对于您的示例输入): >>> sort_data [(34, 2), (9, 4), (6, 1), (5, 0), (3, 5), (1, 3)] 和嵌套我们需要填写这些元素,如: result = [0]*len(data) for i,(_,idx) in enumerate(sort_data,1): result[idx] = i 或者把它放在一起: def obtain_rank(data): sort_data = [(x,i) for i,x in enumerate(data)] sort_data = sorted(sort

2022-05-16 06:29:04    分类:技术分享    python   arrays   algorithm   list   sorting