我有这样的字典:
{'elmo': [4, 3], 'elsa': [4, 2], 'legos': [0, 0], 'drone': [1, 1], 'tablet': [0, 0], 'warcraft': [1, 1]}
现在,这些值表示: elmo这个词在所有引号中显示的是最全面的词,并被引用了3个引号。 现在,elmo和elsa都被引用了4次,但是elmo必须先被引用,因为它已经被更多的引用引用了。 给定最需要的n个最常用词,我必须得到这样的输出 如果n = 2,则必须返回 ['elmo','elsa'] 是否只有一个这样的值:
{'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()中的key关键字使用两个值?
现在,假设我的字典是:
{'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']
答案 0 :(得分:0)
您可以使用list comprehension
和unpacking
:
>>> 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']
根据 EDIT :
>>> sorted(d, key=lambda x:(d[x][1], d[x][0]), reverse=True)
# or, sorted(d, key=lambda x:[*d[x]][::-1], reverse=True)
['past', 'behavior', 'nor', 'make', 'modern', 'last', 'coach', 'affect', 'billion', 'suggest']
答案 1 :(得分:0)
在转换为元组列表时,通过将值的arr = [('elmo', 4), ('elsa', 4), ('legos', 0) ...]
元素存储在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])]
答案 2 :(得分:0)
d = {'elmo': [4, 3], 'elsa': [4, 2], 'legos': [0, 0], 'drone': [1, 1], 'tablet': [0, 0], 'warcraft': [1, 1]}
output = sorted(d.items(), key=lambda k,v:(k[0], k[1]), reverse=True)
output = [x[0] for x in output][0:n]
答案 3 :(得分:0)
您是否尝试过将排序键设为元组?
data = {
'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]
}
sorted_data = sorted(
data.items(),
reverse=True,
key=lambda item: (item[1][1], item[1][0])
)
sorted_keys = [x[0] for x in sorted_data]