按特定列表值排序和 return 字典

Sort and return dict by specific list value

我发现了这个:Sort keys in dictionary by value in a list in Python

这几乎就是我想要的。我想完全按照上面 post 中的定义进行排序,即按值列表中的特定项目排序,但我想 return 整个原始字典按指定的列表条目排序,而不是按键列表。

我最后一次尝试失败了:

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'

您正在尝试使用 dict.items() 序列中的 (key, value) 对作为键。因为 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'])]