【问题标题】:How do I sort a dictionary by value if my value is a tuple?如果我的值是元组,如何按值对字典进行排序?
【发布时间】:2020-05-06 02:38:09
【问题描述】:

我想按元组的第二个索引值排序,元组是给定字典的值。

这是给定的字典:

dict={'123456789': ('*2L 2% Vitali Mil', 47, '(780) 789 0123', 121.26), '123456798': ('*1L 2% Vitali Mil', 41, '(780) 890 7654', 59.45)}

我需要按电话号码排序,即'(780) 789 0123''(780) 890 7654'

我尝试了sorted(dict.items, key=lambda item: item[1][2]),但是当我为我的程序使用格式方法时,这给了我一个错误。

【问题讨论】:

  • 欢迎来到SO,请提交MRE,即。显示示例和预期输出
  • {k: v for k, v in sorted(dict.items(), key=lambda item: item[1][2])} 这将根据您字典中的phone number 对字典进行排序
  • 这个问题在重新打开队列中,即使在编辑之后我也倾向于将其关闭,因为这不是第一次在这里提出这种问题。例如,请参阅Sorting a dict with tuples as values

标签: python sorting dictionary lambda tuples


【解决方案1】:

这可以使用sorted() 来完成 - 请注意我的示例和您的示例之间的区别在于我的示例对d.items() 方法的结果进行排序,该方法返回一个键值元组列表,而您的尝试对@987654323 进行排序@,这是对函数本身的引用。我们还可以使用字典理解将结果格式化为字典;例如:

>>> d = {'123456798': ('*1L 2% Vitali Mil', 41, '(780) 890 7654', 59.45),
         '123456789': ('*2L 2% Vitali Mil', 47, '(780) 789 0123', 121.26)}

>>> sorted(d.items(), key=lambda item: item[1][2])
[('123456789', ('*2L 2% Vitali Mil', 47, '(780) 789 0123', 121.26)),
 ('123456798', ('*1L 2% Vitali Mil', 41, '(780) 890 7654', 59.45))]

>>> {k: v for k, v in sorted(d.items(), key=lambda item: item[1][2])}
{'123456789': ('*2L 2% Vitali Mil', 47, '(780) 789 0123', 121.26),
 '123456798': ('*1L 2% Vitali Mil', 41, '(780) 890 7654', 59.45)}

还要注意,你不应该使用内置的dict 变量来命名你的字典——这样做会覆盖dict 类,所以如果你以后尝试使用dict(),结果将不会像预期的那样.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 2010-10-11
    相关资源
    最近更新 更多