按特定列表值排序并返回dict

时间:2017-11-14 17:25:31

标签: sorting dictionary python-3.6

我发现了这个: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'

1 个答案:

答案 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'])]