python - 按键值对对列表字典进行排序




python-3.x list (2)

你可以

  1. 反转您的映射,创建一个包含数字=>名称列表的字典
  2. 排序这个字典(作为元组)
  3. 选择3个第一项

像这样:

import collections

d = collections.defaultdict(list)
data = {'fbi': [229, 421, 586, 654, 947, 955, 1095, 1294, 1467, 2423, 3063, 3478, 3617, 3730, 3848, 3959, 4018, 4136, 4297, 4435, 4635, 4679, 4738, 5116, 5211, 5330, 5698, 6107, 6792, 6906, 7036], 'comey': [605, 756, 1388, 1439, 1593, 1810, 1959, 2123, 2506, 3037, 6848], 'hillary': [14, 181, 449, 614, 704, 1079, 1250, 2484, 2534, 2659, 3233, 3374, 3488, 3565, 4076, 4756, 4865, 6125, 7109]}

for k,vlist in data.items():
    for v in vlist:
        d[v].append(k)

result = [v[0] for k,v in sorted(d.items())[:3]]

print(result)

这打印:

['hillary', 'hillary', 'fbi']

请注意,如果某个值附加了多个名称,则此代码将仅选择第一个( v[0]

我试图对列表中的值进行排序,并从中创建一个新列表。 这是数据:

{
    'fbi': [229, 421, 586, 654, 947, 955, 1095, 1294, 1467, 2423, 3063, 3478, 3617, 3730, 3848, 3959, 4018, 4136, 4297, 4435, 4635, 4679, 4738, 5116, 5211, 5330, 5698, 6107, 6792, 6906, 7036], 
    'comey': [605, 756, 1388, 1439, 1593, 1810, 1959, 2123, 2506, 3037, 6848], 
    'hillary': [14, 181, 449, 614, 704, 1079, 1250, 2484, 2534, 2659, 3233, 3374, 3488, 3565, 4076, 4756, 4865, 6125, 7109]
}

我正在尝试的是找到这些中的20个最小值并获得其相应键的列表。 例如,前三个最小值是14(希拉里),181(希拉里)和229(fbi)。 因此,我如何获得这样的列表:

['hillary', 'hillary', 'fbi']

所有值总是不同的。 此外,列表中的所有值都按从升序到降序排序。

这是我尝试过的:

for m in range(1,20):
    for i in sort_vals.values():
        if i[0] < a[0]:
            a[0] = i[0]

这给了我最小值但不是任何其他值,因为在一次迭代之后,最小值总是相同的。 我想如果我可以删除该特定值,它将会有所帮助。 想不出别的什么。 谢谢!


只需在sorted()中使用lambda函数。

l = [(k,i) for k,v in d.items() for i in v]
res = [v[0] for v in sorted(l, key=lambda x: x[1])][:20]




dictionary