如何按键值的第一个字符对字典进行分组并按升序对它们进行排序?

How to group a dictionary by the first character of their key-values and sort them in ascending order?

我想按键值的第一个字符对字典进行分组,找到最小值和最大值,然后按找到的最大值的升序对它们进行排序。

dict = {'1,1': [1.0, 2.0], '3,1': [5.0, 8.0], '2,2': [3.0, 9.0], '2,1': [3.0, 11.0]}

分组后的字典,求最大值和最小值,按最大值升序排列后应该是:

dict = {'1': [1.0, 2.0], '3': [5.0, 8.0], '2': [3.0, 11.0]}

这可行,但也许有人有更优雅的答案:

dictionnary = {'1,1': [1.0, 2.0], '3,1': [5.0, 8.0], '2,2': [3.0, 9.0], '2,1': [3.0, 11.0]}
a = [i[0] for i in dictionnary.keys()]
b = dict.fromkeys(a)

for i in b:
    b[i] = []
    for j in dictionnary:
        if j[0] == i:
            if b[i]:
                if dictionnary[j][0]<b[i][0]:
                    b[i][0] = dictionnary[j][0]
                if dictionnary[j][1]>b[i][1]:
                    b[i][1] = dictionnary[j][1]
            else:
                b[i] = dictionnary[j]
b

输出:

{'1': [1.0, 2.0], '3': [5.0, 8.0], '2': [3.0, 11.0]}

此外,您不应该覆盖内置 python dict

首先,您可以继续连接按 k[0] 分组的列表,然后取列表的最小值和最大值:

dct = {'1,1': [1.0, 2.0], '3,1': [5.0, 8.0], '2,2': [3.0, 9.0], '2,1': [3.0, 11.0]}

output = {}
for k, v in dct.items():
    output[k[0]] = output.get(k[0], []) + v

output = {k: [min(v), max(v)] for k, v in output.items()}
print(output) # {'1': [1.0, 2.0], '3': [5.0, 8.0], '2': [3.0, 11.0]}

或者,如果您愿意使用 defaultdict:

from collections import defaultdict # this at the beginning of the script

output = defaultdict(list)
for k, v in dct.items():
    output[k[0]] += v

output = {k: [min(v), max(v)] for k, v in output.items()}