我有一个字典列表。每个字典有两个关键值,在排序时要考虑。一个是“col”,另一个是“row” < / p>
我想要什么
对于每个“row”键,我想获取所有对象并按“col”的值对它们进行排序。最终列表应包含所有对象“行”明智且排序在“col”
例如
对于值为1的“row”键,我想获取所有对象,并按键“col”的值的升序对这些对象进行排序。
注意:col的值范围仅为1到12
我尝试了什么
这是我尝试过的一种伪代码
for column_number in range(1,13):
for each object in json:
if object's "row" key is equal to column number(For each coloumn get all of its object):
add_the_objects_of_each_column_to_a_list
sort_the_list
add_the_sorted_list_to_a_new_list(this list should be similar in form as the input)
我的实际代码
list_to_sort = []
newlist = []
sorted_list = []
for col_number in range(1,13):
for obj in mson:
if(obj['row'] == col_number):
list_to_sort.append(obj)
newlist = sorted(list_to_sort, key=lambda k: k['col'])
#I am not able to write below this for how I will place this sorted newlist in my
final sorted_list variable which is the final variable I want having row wise objects which are sorted on column
要排序的变量:
mson = [
{'col': 10, 'row': 1, 'size_x': 3, 'size_y': 3},
{'col': 1, 'row': 1, 'size_x': 3, 'size_y': 2},
{'col': 5, 'row': 1, 'size_x': 2, 'size_y': 2},
{'col': 1, 'row': 3, 'size_x': 3, 'size_y': 2},
{'col': 1, 'row': 5, 'size_x': 2, 'size_y': 2},
{'col': 1, 'row': 7, 'size_x': 3, 'size_y': 2},
{'col': 8, 'row': 4, 'size_x': 3, 'size_y': 3.0},
{'col': 6, 'row': 7, 'size_x': 3, 'size_y': 2}]
**我想要的输出上面的变量mson **
mson_sorted = [
{'col': 1, 'row': 1, 'size_x': 3, 'size_y': 2},
{'col': 5, 'row': 1, 'size_x': 2, 'size_y': 2},
{'col': 10, 'row': 1, 'size_x': 3, 'size_y': 3},
{'col': 1, 'row': 3, 'size_x': 3, 'size_y': 2},
{'col': 8, 'row': 4, 'size_x': 3, 'size_y': 3.0},
{'col': 1, 'row': 5, 'size_x': 2, 'size_y': 2},
{'col': 1, 'row': 7, 'size_x': 3, 'size_y': 2},
{'col': 6, 'row': 7, 'size_x': 3, 'size_y': 2}]
任何帮助都将非常感激
答案 0 :(得分:2)
sorted
使用key
中的sorted
参数。确保传递一个callable,它返回要按顺序优先级排序的元素中的元组。
sorted(mson, key=lambda d: (d['row'], d['col']))
[{'col': 1, 'row': 1, 'size_x': 3, 'size_y': 2},
{'col': 5, 'row': 1, 'size_x': 2, 'size_y': 2},
{'col': 10, 'row': 1, 'size_x': 3, 'size_y': 3},
{'col': 1, 'row': 3, 'size_x': 3, 'size_y': 2},
{'col': 8, 'row': 4, 'size_x': 3, 'size_y': 3.0},
{'col': 1, 'row': 5, 'size_x': 2, 'size_y': 2},
{'col': 1, 'row': 7, 'size_x': 3, 'size_y': 2},
{'col': 6, 'row': 7, 'size_x': 3, 'size_y': 2}]
答案相同,更明确
def f(d):
return d['row'], d['col']
sorted(mson, key=f)
pd.DataFrame(mson, dtype=object).sort_values(['row', 'col']).to_dict('r')
[{'col': 1, 'row': 1, 'size_x': 3, 'size_y': 2},
{'col': 5, 'row': 1, 'size_x': 2, 'size_y': 2},
{'col': 10, 'row': 1, 'size_x': 3, 'size_y': 3},
{'col': 1, 'row': 3, 'size_x': 3, 'size_y': 2},
{'col': 8, 'row': 4, 'size_x': 3, 'size_y': 3.0},
{'col': 1, 'row': 5, 'size_x': 2, 'size_y': 2},
{'col': 1, 'row': 7, 'size_x': 3, 'size_y': 2},
{'col': 6, 'row': 7, 'size_x': 3, 'size_y': 2}]