【问题标题】:Python - Sorting a dictionary {String Key: List of Strings} by len(value)?Python - 按 len(value) 对字典 {String Key: List of Strings} 进行排序?
【发布时间】:2013-04-18 07:45:18
【问题描述】:

假设我有以下字典:

{"A":["u","w"],"B":["t"],"C":["x","y","z"]}

如何按每个值的列表中的字符串数对字典进行排序,以便它返回:

[("C",["x","y","z"]), ("A",["u","w"]), ("B":["t"])]

因为“C”的值在列表中有三个项目,“A”有两个,“B”有一个。我的想法是这样的:

sorted(d.items(),key=operator.methodcaller(len(),tuple[1]),reverse=True)

或者

sorted(d.items(),key=(string, stringList):(len(stringList),string),reverse=True)

但两者似乎都不起作用。对排序还是很陌生,所以感谢您的帮助!

【问题讨论】:

  • operator.methodcaller 将字符串作为第一个参数,要调用的方法 tuple[1] 在您调用它时不存在。 key 也是一个函数,而不是一个元组。

标签: python sorting dictionary


【解决方案1】:
>>> d = {"A":["u","w"],"B":["t"],"C":["x","y","z"]}
>>> sorted(d.items(), key=lambda x: len(x[1]), reverse=True)
[('C', ['x', 'y', 'z']), ('A', ['u', 'w']), ('B', ['t'])]

【讨论】:

  • 太快了!谢谢 jamylak,将您的回复标记为 11 分钟后的答案。
【解决方案2】:

你几乎拥有它。

>>> sorted(d, key=lambda x: len(d[x]), reverse=True)
['C', 'A', 'B']

或者,也可以获取值:

>>> sorted(d.items(), key=lambda x: len(x[1]), reverse=True)
[('C', ['x', 'y', 'z']), ('A', ['u', 'w']), ('B', ['t'])]

【讨论】:

    【解决方案3】:

    使用lambda

    sorted(d.items(), key=lambda x: len(x[1]), reverse=True)
    

    【讨论】:

      猜你喜欢
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多