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,就这样