[英]How to sort list of dictionaries by value
dictionary[pattern_key] = {"key": index_key, "document": index_source, "startPos":index_start, "endPos": index_end}
這是我的字典清單的一部分
{
'AGACAATCTC': {'startPos': '174', 'document': 'source-document01012.txt', 'endPos': '183', 'key': 'AGACAATCTC'},
'GGTCAGACAA': {'startPos': '18', 'document': 'source-document01012.txt', 'endPos': '27', 'key': 'GGTCAGACAA'},
'TAGATGAAGT': {'startPos': '102', 'document': 'source-document01012.txt', 'endPos': '111', 'key': 'TAGATGAAGT'}
}
如何按文檔然后按startPos排序 ?
我嘗試過這樣的事情,但不起作用
sorted_dict = sorted(dictionary, key=itemgetter(pattern_key[document]))
script.py
#!/usr/bin/env python
import sys
dictionary = {};
for pattern in sys.stdin:
if "," in pattern:
pattern_key, pattern_source, pattern_start, pattern_end = pattern.strip().split(",")
index_file = open('index.txt', 'r')
for line in index_file:
if "," in line:
index_key, index_source, index_start, index_end = line.strip().split(",")
if pattern_key == index_key:
dictionary[pattern_key] = {"document": index_source, "startPos":index_start, "endPos": index_end}
sorted(dictionary.items(), key = lambda x: (x[1]['document'], int(x[1]['startPos'])))
for k, v in dictionary.items():
print (k, '-->', v)
您可以在內部字典中獲得條目作為sorted
鍵:
sorted(dictionary.items(), key = lambda x: (x[1]['document'], int(x[1]['startPos'])))
元組鍵將首先按第0個元素排序,然后按1st排序,依此類推。
請注意,這會生成一個元組列表,其中每個元組都是(str, dict)
。
編輯:
在您的上下文中,正確的實現如下:
sorted_values = sorted(dictionary.items(), key = lambda x: (x[1]['document'], int(x[1]['startPos'])))
for k, v in sorted_values:
print (k, '-->', v)
根據所需的條件進行排序,然后從排序列表中創建一個新的OrderedDict
,因為dict
無法OrderedDict
性質保留排序:
>>> from collections import OrderedDict
>>>
>>> d = {'AGACAATCTC': {'endPos': '183', 'document': 'source-document01010.txt', 'key': 'AGACAATCTC', 'startPos': '174'}, 'GGTCAGACAA': {'endPos': '27', 'document': 'source-document01010.txt', 'key': 'GGTCAGACAA', 'startPos': '18'}, 'TAGATGAAGT': {'endPos': '111', 'document': 'source-document01011.txt', 'key': 'TAGATGAAGT', 'startPos': '102'}}
>>>
>>> d_ordered = OrderedDict(sorted(d.items(), key=lambda t:(t[1]['document'], int(t[1]['startPos']))))
>>>
>>> d_ordered
OrderedDict([('GGTCAGACAA', {'endPos': '27', 'document': 'source-document01010.txt', 'key': 'GGTCAGACAA', 'startPos': '18'}), ('AGACAATCTC', {'endPos': '183', 'document': 'source-document01010.txt', 'key': 'AGACAATCTC', 'startPos': '174'}), ('TAGATGAAGT', {'endPos': '111', 'document': 'source-document01011.txt', 'key': 'TAGATGAAGT', 'startPos': '102'})])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.