簡體   English   中英

訪問python中的字典列表並使用值對其進行排序(嵌套字典)

[英]Accessing list of dictionaries in python and sort it using value (Nested dictionary)

我有一個包含 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”的值對字典列表進行排序?

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] 獲取內部列表的第一個值。

這是最快的方法,因為它避免使用自定義比較函數,而是使用內置比較。 您可以從字典排序列表中獲取更多信息

假設每個字典只有一個鍵,您可以執行以下操作:

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'},
]

因為只有一個值的字典和只有一個值的列表往往會使容器有點矯枉過正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM