我已经看过这篇文章和这篇文章以及其他许多文章,但还没有找到我的问题的答案,也无法弄明白.
我有一份清单.例如,它看起来像:
Dict = {'a':[1,2,3,4], 'b':[9,8,7,6], 'c':[8,5,3,2]}
Run Code Online (Sandbox Code Playgroud)
我想根据列表中的特定项返回已排序(降序/反向)的键列表.例如,我想根据每个列表中的第4项对a,b,c进行排序.
这应该返回sorted_keys = ['b','a','c']按值排序的列表[6,4,2].
合理?请帮忙......谢谢!
b = [{'id': 'a'}, {'id': 'c'}, {'id': 'b'}, {'id': 'e'}]
Run Code Online (Sandbox Code Playgroud)
我需要这个成为:
b = [{'id': 'a'}, {'id': 'c'}, {'id': 'e'}, {'id': 'b'}]
Run Code Online (Sandbox Code Playgroud)
此新订单由另一个列表定义.
my_filter = ['a', 'c', 'e', 'b']
Run Code Online (Sandbox Code Playgroud)
......正如您所看到的,带有dicts的列表现在具有一系列在my_filter变量上显示的ID .
我能够重新安排这个但是使用了一堆fors而且效率不高.你知道更好的方法吗?我已经知道如何按字典的值对字典列表进行排序,但我需要这个顺序由另一个列表定义.
编辑:my_filter被命名filter,我改变了Dave Kirby的推荐,因为它是内置的.由于某些答案仍然存在filter于其中,因此,如果您在其中一些答案中看到此编辑部分,则应避免混淆filter.
列表有结构:
test = [{"title": title, "ratio": ratio, "delta": begin - now()}]
Run Code Online (Sandbox Code Playgroud)
需要按比例(max-> min)和按delta(min-> max)排序后排序?
我有一个字典列表,如下所示:
my_list = [
{'1200' : [10, 'A']},
{'1000' : [24, 'C']},
{'9564' : [6, 'D']},
]
Run Code Online (Sandbox Code Playgroud)
列表中的所有字典都有一个键值对。
我想根据作为列表的每个字典值的第一个元素对其进行排序,因此排序后的列表如下所示:
my_list_sorted = [
{'9564' : [6, 'D']},
{'1200' : [10, 'A']},
{'1000' : [24, 'C']},
]
Run Code Online (Sandbox Code Playgroud)
如您所见,键具有不同的名称,这就是为什么我不能使用以下帖子中的答案:如何按字典的值对字典列表进行排序?
我有一个数据结构(从YAML文档创建),如下所示:
{
'SD_TX_EN_CFG[5]': {'Bits': {0: 'ENTX // 0 = Disabled, 1 = Enabled'}, 'Name': 'TX Enable Register (Link 5)', 'Offset': 43024},
'SD_TX_EN_CFG[4]': {'Bits': {0: 'ENTX // 0 = Disabled, 1 = Enabled'}, 'Name': 'TX Enable Register (Link 4)', 'Offset': 40976},
'SD_RX_EN_CFG[5]': {'Bits': {0: 'ENRX // 0 = Disabled, 1 = Enabled'}, 'Name': 'RX Enable Register (Link 5)', 'Offset': 43008},
'SD_RX_EN_CFG[3]': {'Bits': {0: 'ENRX // 0 = Disabled, 1 = Enabled'}, 'Name': 'RX Enable Register (Link 3)', 'Offset': 38912},
'SD_RX_EN_CFG[2]': {'Bits': …Run Code Online (Sandbox Code Playgroud) 我想按特定键的值对字典进行排序(示例中的“foo”)
mydict = dict()
mydict["a"] = {"foo": 0.3, "boo": 0.1}
mydict["b"] = {"foo": 0.1, "boo": 0.2}
mydict["c"] = {"foo": 0.8, "boo": 0.3}
mydict["d"] = {"foo": 0.5, "boo": 0.4}
mydict["e"] = {"foo": 0.2, "boo": 0.5}
# sort by "foo" in descending order
# expected result: [{"foo": 0.8, "boo": 0.3}, {"foo": 0.5, "boo": 0.4}, {"foo": 0.3, "boo": 0.1}, {"foo": 0.2, "boo": 0.5}, {"foo": 0.1, "boo": 0.2}]
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到上面评论中显示的我想要的结果?
按另一个列表对字典列表进行排序。我有带有字典的列表(IN),我想按另一个列表(sortValue)进行排序。
IN = [{
"id": "a",
"val": "Value",
"val1": "Value1"
},
{
"id": "b",
"val": "Value",
"val1": "Value1"
},
{
"id": "c",
"val": "Value",
"val1": "Value1"
}]
sortValue = ['b','c','a']
Run Code Online (Sandbox Code Playgroud)
我想要输出
OUT = [{
"id": "b",
"val": "Value",
"val1": "Value1"
},
{
"id": "c",
"val": "Value",
"val1": "Value1"
},
{
"id": "a",
"val": "Value",
"val1": "Value1"
}]
Run Code Online (Sandbox Code Playgroud)
如何得到这样的东西?
我试过了:
OUT = []
for xx in sortValue:
for x in IN:
if x['id'] == xx:
OUT.append(x)
print …Run Code Online (Sandbox Code Playgroud) 所以基本上我有一个字典列表,其中包含以下值:
[
{'First Name ':'Stephen', 'Last Name':'Queen','Age':61,'Marks':89},
{'First Name ':'Stephen', 'Last Name':'Queen','Age':89,'Marks':68},
{'First Name ':'Angelica', 'Last Name':'King','Age':39,'Marks':84},
{'First Name ':'Stephen', 'Last Name':'King','Age':29,'Marks':78},
{'First Name ':'Stephen', 'Last Name':'Queen','Age':61,'Marks':84},
]
Run Code Online (Sandbox Code Playgroud)
所以我基本上想要在First Name上的'升序'中排序First,然后在Second Name上按'升序'排序,然后在Age上按'降序'排序,最后在标记上排序'降序'.因此,排序后应该如下所示:
[
{'First Name ':'Angelica', 'Last Name':'King','Age':39,'Marks':84},
{'First Name ':'Stephen', 'Last Name':'King','Age':29,'Marks':78},
{'First Name ':'Stephen', 'Last Name':'Queen','Age':89,'Marks':68},
{'First Name ':'Stephen', 'Last Name':'Queen','Age':61,'Marks':98},
{'First Name ':'Stephen', 'Last Name':'Queen','Age':61,'Marks':89}
]
Run Code Online (Sandbox Code Playgroud)
所以我的问题是使用Pythonic方法有效地完成它.我试过这里提到的解决方案,但是想不到将它复制到我的情况,我希望同时在多个键上自定义顺序(即创建一种映射器以用户定义的方式对字典进行排序).
我有一个Python中的两个词典列表
list = [{'id' : 'ewsfsdf',
'_source' :
{'timestamp':'2018-08-08T20:56:01',
'bytes':'43534534'}},
{'id' : 'ewsfsdz',
'_source' :
{'timestamp':'2018-08-08T20:57:01',
'bytes':'4354343534'}}]
Run Code Online (Sandbox Code Playgroud)
我想按第二深度字典中的时间戳排序列表元素.我查找了许多其他python示例,但无法通过列表中字典元素的字典元素找到合适的解决方案来排序列表元素.
你能给我一个线索吗?
我有以下 Json 作为输出,还需要按 sal 值的降序组织 json
[
{
"sal": 12,
"Stack ": "Java",
"EmpID": "00030010-0010-0000-0000-000000000121"
},
{
"sal": 24,
"Stack ": ".net",
"EmpID": "00030010-0010-0000-0000-000000000144"
},
{
"sal": 14,
"Stack ": "Ruby",
"EmpID": "00030010-0010-0000-0000-000000000198"
}
]
Run Code Online (Sandbox Code Playgroud)
请帮助我实现同样的目标
上下文:
在 Python 3.9 中,即使存在重复项,按第二个列表对大多数对象的列表进行排序也很容易:
>>> sorted(zip([5, 5, 3, 2, 1], ['z', 'y', 'x', 'w', 'x']))
[(1, 'x'), (2, 'w'), (3, 'x'), (5, 'y'), (5, 'z')]
Run Code Online (Sandbox Code Playgroud)
如果要排序的列表包含字典,则排序通常会顺利进行:
>>> sorted(zip([3, 2, 1], [{'z':1}, {'y':2}, {'x':3}]))
[(1, {'x': 3}), (2, {'y': 2}), (3, {'z': 1})]
Run Code Online (Sandbox Code Playgroud)
问题:
但是,当要排序的列表包含重复项时,会出现以下错误:
>>>sorted(zip([5, 5, 3, 2, 1], [{'z':1}, {'y':2}, {'x':3}, {'w': 4}, {'u': 5}]))
*** TypeError: '<' not supported between instances of 'dict' and 'dict'
Run Code Online (Sandbox Code Playgroud)
这个问题对我来说非常疯狂:要排序的列表的值如何影响要排序的列表?
替代解决方案:
一种不太优雅的解决方案是按索引从列表中获取字典对象:
>>> sort_list = [5, 5, 3, 2, 1]
>>> …Run Code Online (Sandbox Code Playgroud) 我在 Python 的字典列表中有这组值。
[
{'dep_price': '42.350', 'dep_date': '8-Mar-2017', 'trip_type': 'dep'},
{'dep_price': '42.350', 'dep_date': '9-Mar-2017', 'trip_type': 'dep'},
{'dep_price': '36.350', 'dep_date': '10-Mar-2017', 'trip_type': 'dep'}
]
Run Code Online (Sandbox Code Playgroud)
如何根据字段“dep_price”作为浮点值对它们进行排序?