我有一個這樣的python字典:
dict = {"A1":"value1", "C1":"value3", "B1":"value2", "C2":"value6", "A2":"value4", "B2":"value5", "B10":"value7", "C10":"value8"}
(實際上,鍵是 Excel 單元格地址)
我想像這樣對字典進行排序:
sorted_dict = {
"A1":"value1",
"B1":"value2",
"C1":"value3",
"A2":"value4",
"B2":"value5",
"C2":"value6",
"B10":"value7",
"C10":"value8"
}
有誰能夠幫我?
謝謝。
uj5u.com熱心網友回復:
首先,不要用保留字命名你的變數dict
在這里,我先按數字排序,然后按字母排序A1
l = list(mydict.keys())
l.sort(key=lambda x: (int(x[1:]), x[0]))
mydict = {k: mydict[k] for k in l}
mydict
結果:
{'A1': 'value1',
'B1': 'value2',
'C1': 'value3',
'A2': 'value4',
'B2': 'value5',
'C2': 'value6',
'B10': 'value7',
'C10': 'value8'}
uj5u.com熱心網友回復:
看起來排序是基于值的,在這種情況下:
import re
data = {"A1":"value1", "C1":"value3", "B1":"value2", "C2":"value6", "A2":"value4", "B2":"value5", "B10":"value7", "C10":"value8"}
rep = re.compile('([A-Za-z]*)(\d )')
def cmp(x):
_, value = x
a, n = rep.findall(value)[0]
return int(n), a
print(dict(sorted(data.items(), key=cmp)))
輸出:
{'A1': 'value1', 'B1': 'value2', 'C1': 'value3', 'A2': 'value4', 'B2': 'value5', 'C2': 'value6', 'B10': 'value7', 'C10': 'value8'}
筆記:
這里的假設是這些值是一個字母序列,后跟一個數字序列
uj5u.com熱心網友回復:
看起來您想按 Excel 行號和列號排序,從單元格地址派生。為此,您需要將 A1 樣式的單元格地址轉換為可排序的鍵。這很棘手,因為您不能只拆分或交換字母和數字部分,因為這不會正確處理像“AA”這樣的列。這是一些應該作業的代碼,基于https://stackoverflow.com/a/12902801/3830997。
from openpyxl.utils.cell import coordinate_from_string, column_index_from_string
def row_col(item):
# item is a tuple of cell ref, value
coord = coordinate_from_string(item[0])
col = column_index_from_string(coord[0])
row = coord[1]
return (row, col)
my_dict = {"A1":"value1", "C1":"value3", "B1":"value2", "C2":"value6", "A2":"value4", "B2":"value5", "B10":"value7", "C10":"value8"}
new_dict = dict(sorted(my_dict.items(), key=row_col))
uj5u.com熱心網友回復:
對于新輸出,這將起作用
print(dict(sorted(dict_.items(), key=lambda x: x[1])))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514762.html
標籤:Python排序字典
上一篇:給定一組優先級對/規則時如何排序
