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



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

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

首先,您可以继续将按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()}

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

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

另外,你不应该覆盖内置的pythondict

最新更新