根据字典中列表中元组的第二个元素排序
Sorting according to Second Element of Tuples in Lists in a Dictionary
现在我有以下包含列表的字典,元组是每个列表的元素:
dict1 = {'it': [('was', 4)], 'was': [('the', 4)], 'the': [('best', 1), ('worst', 1), ('age', 2)], 'best': [('of', 1)], 'of': [('times', 2), ('wisdom', 1), ('foolishness', 1)], 'times': [('it', 2)], 'worst': [('of', 1)], 'age': [('of', 2)], 'wisdom': [('it', 1)]}
我需要使用 字典理解 根据每个值(每个元组的第二个元素)的频率对字典进行排序。
预期输出为:
{'it': ['was'], 'was': ['the'], 'the': ['age', 'best', 'worst'], 'best': ['of'], 'of': ['times', 'wisdom', 'foolishness'], 'times': ['it'], 'worst': ['of'], 'age': ['of'], 'wisdom': ['it']}
我尝试使用以下代码:
dict2 = {k:sorted([pair[0] for pair in v],key=lambda x: x[1],reverse=True) for k,v in dict1.items()}
但输出结果是:
{'it': ['was'], 'was': ['the'], 'the': ['worst', 'age', 'best'], 'best': ['of'], 'of': ['foolishness', 'times', 'wisdom'], 'times': ['it'], 'worst': ['of'], 'age': ['of'], 'wisdom': ['it']}
键 'the' 和 'of' 的值顺序混淆了。我应该如何更正我的代码?
你很接近,但你似乎在过滤掉元组,然后使用一个多余的键函数。此外,您只保留排序之前的单词,所以您所做的实际上是根据这些单词的 第二个字符 进行排序,因为现在您在每次调用时都可以迭代key函数是实际的字符串。这可能会更清楚:
test = [('1z', 2), ('2a', 1), ('3d', 1)]
sorted([pair[0] for pair in test], key=lambda x: x[1])
# ['2a', '3d', '1z']
您可以只对元组列表进行排序,并根据第二项的时间排序 -1
:
{k: [i[0] for i in sorted(v, key=lambda x: -x[1])] for k,v in d.items()}
{'it': ['was'],
'was': ['the'],
'the': ['age', 'best', 'worst'],
'best': ['of'],
'of': ['times', 'wisdom', 'foolishness'],
'times': ['it'],
'worst': ['of'],
'age': ['of'],
'wisdom': ['it']}
现在我有以下包含列表的字典,元组是每个列表的元素:
dict1 = {'it': [('was', 4)], 'was': [('the', 4)], 'the': [('best', 1), ('worst', 1), ('age', 2)], 'best': [('of', 1)], 'of': [('times', 2), ('wisdom', 1), ('foolishness', 1)], 'times': [('it', 2)], 'worst': [('of', 1)], 'age': [('of', 2)], 'wisdom': [('it', 1)]}
我需要使用 字典理解 根据每个值(每个元组的第二个元素)的频率对字典进行排序。 预期输出为:
{'it': ['was'], 'was': ['the'], 'the': ['age', 'best', 'worst'], 'best': ['of'], 'of': ['times', 'wisdom', 'foolishness'], 'times': ['it'], 'worst': ['of'], 'age': ['of'], 'wisdom': ['it']}
我尝试使用以下代码:
dict2 = {k:sorted([pair[0] for pair in v],key=lambda x: x[1],reverse=True) for k,v in dict1.items()}
但输出结果是:
{'it': ['was'], 'was': ['the'], 'the': ['worst', 'age', 'best'], 'best': ['of'], 'of': ['foolishness', 'times', 'wisdom'], 'times': ['it'], 'worst': ['of'], 'age': ['of'], 'wisdom': ['it']}
键 'the' 和 'of' 的值顺序混淆了。我应该如何更正我的代码?
你很接近,但你似乎在过滤掉元组,然后使用一个多余的键函数。此外,您只保留排序之前的单词,所以您所做的实际上是根据这些单词的 第二个字符 进行排序,因为现在您在每次调用时都可以迭代key函数是实际的字符串。这可能会更清楚:
test = [('1z', 2), ('2a', 1), ('3d', 1)]
sorted([pair[0] for pair in test], key=lambda x: x[1])
# ['2a', '3d', '1z']
您可以只对元组列表进行排序,并根据第二项的时间排序 -1
:
{k: [i[0] for i in sorted(v, key=lambda x: -x[1])] for k,v in d.items()}
{'it': ['was'],
'was': ['the'],
'the': ['age', 'best', 'worst'],
'best': ['of'],
'of': ['times', 'wisdom', 'foolishness'],
'times': ['it'],
'worst': ['of'],
'age': ['of'],
'wisdom': ['it']}