【问题标题】:Cannot convert a dictionary into list of tuples and sort it无法将字典转换为元组列表并对其进行排序
【发布时间】:2020-08-24 11:54:11
【问题描述】:

我想在我的数据集中查找异常值键(名称),因此我试图从我的字典中创建一个元组列表并按薪水对其进行排序。那是我的代码

for key, value in data_dict.iteritems():
    sorted_dict_list = []
    sorted_dict_list.append((key, value["salary"], value["bonus"]))
    sorted_dict_list.sort(key=lambda tup: tup[1])
    for tuple in sorted_dict_list:
        print tuple

问题是打印输出未排序。可能是什么问题?

【问题讨论】:

  • 你能显示你的data_dict吗?
  • 你为什么在这里使用for循环???想想你的代码在做什么,在你的脑海中逐步完成它......注意,每次迭代你将sorted_dict_list设置为[],所以当您尝试对其进行排序并对其进行循环......无论如何,您应该提供minimal reproducible example
  • 为什么每次迭代都对 sorted_dict_list 进行排序?你可以把那行代码放在for循环之外

标签: python list sorting dictionary tuples


【解决方案1】:

您应该在第一个for 循环之外声明sorted_dict_list,否则每次您通过循环时都会有一个新的空列表。最重要的是,您通过 sorted_dict_list 的循环位于第一个 for 循环内。

因此,每次循环外循环时,都会创建一个空列表,将下一个键值对添加到其中,遍历列表(只有一个项目长)并打印出值。基本上,您只是在执行过程中打印出每个键值对。

您需要将列表声明移出循环并取消缩进第二个循环。

sorted_dict_list = []
for key, value in data_dict.iteritems():
    sorted_dict_list.append((key, value["salary"], value["bonus"]))
    sorted_dict_list.sort(key=lambda tup: tup[1])

for tuple in sorted_dict_list:
    print tuple

这可能是一个更好的解决方案:

def sortKey(item):
    return item[1]

sorted_dict = [(key, value['salary'], value['bonus']) for key, value in data_dict.items()]
sorted_dict = sorted(sorted_dict, key=sortKey)

for item in sorted_dict:
    print(item)

【讨论】:

  • 在第一个解决方案中,为什么每次迭代都对 sorted_dict_list 进行排序?你可以把那行代码放在for循环之外
  • 我只是在向他展示如何更新他当前的代码以使其正常工作。我的第二个解决方案照你说的做,而且会更 Pythonic。
  • 我同意,这只是提示 :)
  • 谢谢,帮了大忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2018-10-19
  • 2018-10-24
  • 2016-08-09
  • 2018-09-20
相关资源
最近更新 更多