【问题标题】:Accessing list of dictionaries in python and sort it using value (Nested dictionary)访问python中的字典列表并使用值(嵌套字典)对其进行排序
【发布时间】:2023-03-25 00:16:01
【问题描述】:

我有一个包含 50 个字典的列表,并希望按该字典的“Key2”值进行排序。

list1= [{'outside_key1': [ { 'key1': 'one', 'key2': 'xyz','key3':'three'}]} ,
        {'outside_key2': [ { 'key1': 'one', 'key2': 'abc','key3':'three'}]}]

Key2 可以被静态访问:

>>>print list1[0]['outside_key1'][0]['key2']
   xyz

现在根据'key2'排序喜欢:

sorted_list = sorted(list1, key=lambda k: k[???])

最终按值排序变为:

[{'outside_key2': [ { 'key1': 'one', 'key2': 'abc','key3':'three'}]} ,
 {'outside_key1': [ { 'key1': 'one', 'key2': 'xyz','key3':'three'}]}]

所以我的问题:
1. 如何动态获取 'Key2' 的值?
2. 如何根据'Key2'的值对字典列表进行排序?

【问题讨论】:

  • “外部”字典是否总是只有一个键?
  • 是的,字典外总是有一个键。

标签: python list python-2.7 sorting dictionary


【解决方案1】:

假设每个字典只有一个键,您可以执行以下操作:

sorted(list1, key=lambda d: d[next(iter(d))][0]['key2'])

这里:d[next(iter(d))] 将给出与d 关联的第一个键的值。当然,字典是无序的,所以“第一个”键只有在字典中只有一个键值对时才有意义...


FWIW,您的数据结构似乎真的阻碍了这里的干净解决方案。似乎 dict 的平面列表将是存储数据的更好方法:

list1 = [
    {'key1': 'one', 'key2': 'abc', 'key3':'three'},
    { 'key1': 'one', 'key2': 'xyz','key3':'three'},
]

因为只有一个值的字典和只有一个值的列表往往会使容器有点矫枉过正。

【讨论】:

    【解决方案2】:
    list1= [{'outside_key1': [ { 'key1': 'one', 'key2': 'xyz','key3':'three'}]} ,
            {'outside_key2': [ { 'key1': 'one', 'key2': 'abc','key3':'three'}]}]
    sort_on = "key2"
    decorated = [(dict_.values()[0][0][sort_on], dict_) for dict_ in list1]
    decorated.sort()
    result = [dict_ for (key, dict_) in decorated]
    print result
    

    dict_.values()获取外部dic值,第一个[0]获取outside_key1的值,第二个[0]获取内部列表的第一个值。

    这是最快的方法,因为它避免使用自定义比较函数,而是使用内置比较。您可以从Sorting Lists of Dictionaries获取更多信息

    【讨论】:

    • 太完美了。非常感谢。 :)
    猜你喜欢
    • 1970-01-01
    • 2013-01-21
    • 2021-03-08
    • 1970-01-01
    • 2022-01-27
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多