Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据列表中的值对字典进行排序?_Python_Sorting_Dictionary - Fatal编程技术网

Python 如何根据列表中的值对字典进行排序?

Python 如何根据列表中的值对字典进行排序?,python,sorting,dictionary,Python,Sorting,Dictionary,我有一本这样的字典: {'elmo': [4, 3], 'elsa': [4, 2], 'legos': [0, 0], 'drone': [1, 1], 'tablet': [0, 0], 'warcraft': [1, 1]} {'elmo': 4, 'elsa': 4, 'legos': 0, 'drone': 1, 'tablet': 0, 'warcraft': 1} arr = [('elmo', 4), ('elsa', 4), ('legos', 0) ...] 现在,这些

我有一本这样的字典:

{'elmo': [4, 3], 'elsa': [4, 2], 'legos': [0, 0], 'drone': [1, 1], 'tablet': [0, 0], 'warcraft': [1, 1]}
{'elmo': 4, 'elsa': 4, 'legos': 0, 'drone': 1, 'tablet': 0, 'warcraft': 1}
arr = [('elmo', 4), ('elsa', 4), ('legos', 0) ...]
现在,这些值意味着: elmo这个词在所有引文中出现得最全面,它被引用了3个引文。 现在,elmo和elsa都被引用了4次,但elmo必须排在第一位,因为它被引用的次数更多。 我必须得到这样一个输出,给定所需的前n个最频繁的单词 如果n=2,则它必须返回 ['elmo','elsa'] 如果只有这样一个值:

{'elmo': [4, 3], 'elsa': [4, 2], 'legos': [0, 0], 'drone': [1, 1], 'tablet': [0, 0], 'warcraft': [1, 1]}
{'elmo': 4, 'elsa': 4, 'legos': 0, 'drone': 1, 'tablet': 0, 'warcraft': 1}
arr = [('elmo', 4), ('elsa', 4), ('legos', 0) ...]
我会将其转换为如下列表:

{'elmo': [4, 3], 'elsa': [4, 2], 'legos': [0, 0], 'drone': [1, 1], 'tablet': [0, 0], 'warcraft': [1, 1]}
{'elmo': 4, 'elsa': 4, 'legos': 0, 'drone': 1, 'tablet': 0, 'warcraft': 1}
arr = [('elmo', 4), ('elsa', 4), ('legos', 0) ...]
然后我会这样做:

return [x for x, _ in sorted(arr, key=lambda x: x[1])]
所以,这很容易。但是现在有两个值,如[4,3]等。如何处理sort()中关键字的两个值

编辑: 现在,假设我的字典是:

{'coach': [9, 7], 'make': [15, 9], 'modern': [9, 8], 'suggest': [4, 4], 'behavior': [11, 10], 'past': [12, 10], 'affect': [5, 5], 'billion': [5, 4], 'nor': [11, 10], 'last': [9, 8]}
如果我这样做:

r = [(k, v) for k, v in zip(word_map.keys(), word_map.values())]
r.sort(key=lambda x: x[1][1], reverse=True)
return [t for t, _ in r]
(其中word_map是我的字典名) 我必须得到:

['past', 'behavior', 'nor', 'make', 'modern', 'last', 'coach', 'affect',  'billion','suggest']
但我得到的却是:

['behavior', 'past', 'nor', 'make', 'modern', 'last', 'coach', 'affect', 'suggest', 'billion']

您可以使用
列表理解
解包

>>> d = {'elmo': [4, 3], 'elsa': [4, 2], 'legos': [0, 0], 'drone': [1, 1], 'tablet': [0, 0], 'warcraft': [1, 1]}
>>> [name for name, (q1, q2) in d.items() if q2 >= 2]
['elmo', 'elsa']
要排序:

>>> sorted(d, key=lambda x:d[x], reverse=True)
['elmo', 'elsa', 'drone', 'warcraft', 'legos', 'tablet']
根据编辑:


转换为元组列表时,将其存储为格式
arr=[('elmo',4),('elsa',4),('legos',0)…]
bye存储dict中key:value对中的值的
0th
元素

for k,v in dictionary.items():
    arr.append((k,v[0]))

return [x for x, _ in sorted(arr, key=lambda x: x[1])]

您是否尝试过将排序键设置为元组

数据={
“教练”:[9,7],
“制造”:[15,9],
“现代”:[9,8],
“建议”:[4,4],
“行为”:[11,10],
“过去”:[12,10],
“影响”:[5,5],
“十亿”:[5,4],
“否”:[11,10],
“最后一个”:[9,8]
}
已排序的数据=已排序的(
data.items(),
反向=真,
key=lambda项:(项[1][1],项[1][0])
)
排序的_键=[x[0]表示排序的_数据中的x]

您可以按列表元素1对其排序,然后查找具有相同列表元素1的值,然后按列表元素2对其排序。如果你想知道它的外观,我可以把代码作为答案发布。当你比较列表时,它会按顺序比较元素。因此,您应该得到所需的结果。将其转换为一个列表,如
arr=[('elmo',[4,3]),('elsa',[4,2]),('legos',[0,0])…]
@JohnBrookfields,就这样