我发现了这个:Sort keys in dictionary by value in a list in Python
这几乎是我想要的。我想完全按照上面的帖子中的定义排序,即通过值列表中的特定项,但我想返回按指定列表条目排序的整个原始字典,而不是键列表。
我的最后一次尝试失败了:
details = {'India': ['New Dehli', 'A'],
'America': ['Washington DC', 'B'],
'Japan': ['Tokyo', 'C']
}
print('Country-Capital List...')
print(details)
print()
temp1 = sorted(details.items(), key=lambda value: details[value][1])
print(temp1)
错误:
{'India': ['New Dehli', 'A'], 'America': ['Washington DC', 'B'], 'Japan': ['Tokyo', 'C']}
Traceback (most recent call last):
File "C:/Users/Mark/PycharmProjects/main/main.py", line 11, in <module>
temp1 = sorted(details.items(), key=lambda value: details[value][1])
File "C:/Users/Mark/PycharmProjects/main/main.py", line 11, in <lambda>
temp1 = sorted(details.items(), key=lambda value: details[value][1])
TypeError: unhashable type: 'list'
答案 0 :(得分:1)
您正尝试使用(key, value)
序列中的dict.items()
对作为密钥。因为value
是一个列表,所以这会失败,因为键必须是可清除的,而列表不是。
直接使用该值:
temp1 = sorted(details.items(), key=lambda item: item[1][1])
我将lambda
参数重命名为item
,以便更清楚传入的内容。item[1]
是来自(key, value)
对的值,item[1][1]
}是每个列表中的第二个条目。
演示:
>>> details = {'India': ['New Dehli', 'A'],
... 'America': ['Washington DC', 'B'],
... 'Japan': ['Tokyo', 'C']
... }
>>> sorted(details.items(), key=lambda item: item[1][1])
[('India', ['New Dehli', 'A']), ('America', ['Washington DC', 'B']), ('Japan', ['Tokyo', 'C'])]