Abh*_*ith 17 python dictionary list python-3.x
我正在尝试对列表字典中的值进行排序,并从中创建一个新列表。数据如下:
{
'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]
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试的是在其中找到20个最小值,并获取其对应键的列表。例如,前三个最小值是14(希拉里),181(希拉里)和229(fbi)。因此,如何获得这样的列表:
{
'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]
}
Run Code Online (Sandbox Code Playgroud)
所有值将始终不同。同样,列表中的所有值都按升序到降序排序。
这是我尝试过的:
['hillary', 'hillary', 'fbi']
Run Code Online (Sandbox Code Playgroud)
这给了我最小值,但没有其他值,因为一次迭代后,最小值始终是相同的。我想如果可以删除该特定值将很有帮助。想不到别的了。谢谢!
yat*_*atu 16
您可以将字典(d
在这里)展平为具有相应key/value
对的元组列表,并根据值对元组进行排序:
from operator import itemgetter
l = [(k,i) for k,v in d.items() for i in v]
# [('fbi', 229), ('fbi', 421), ('fbi', 586), ('fbi', 654),...
list(zip(*sorted(l, key=itemgetter(1))[:3]))[0]
# ('hillary', 'hillary', 'fbi')
Run Code Online (Sandbox Code Playgroud)
Jea*_*bre 12
你可以
像这样:
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)
Run Code Online (Sandbox Code Playgroud)
打印:
['hillary', 'hillary', 'fbi']
Run Code Online (Sandbox Code Playgroud)
请注意,如果值附加多个名称,则此代码将仅选择第一个(v[0]
)