【问题标题】:Sorting dictionary by values按值排序字典
【发布时间】:2019-09-28 01:46:03
【问题描述】:

我想按值从高到低排序字典。字典是这样的:

{'data1': {'/home/data1': 273}, 'data2': {'/home/data2': 2}, 'data3': {'/home/data3': 10}, 'data4': {'/home/data4': 1}}

我有一些代码可以在一个 VM 中运行,但是当我尝试在另一个 VM 中时不起作用。


dict = sorted(dicta.items(), key=lambda x: [int(x) for x in x[1].values()], reverse = True)


在一个虚拟机中我得到了这个错误,而在另一个虚拟机中它可以工作(使用 virtualenv 执行具有相同 python 版本的相同脚本等)

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

有什么想法吗?

【问题讨论】:

  • @AmitGupta 不,我的问题是我的代码只能在一个 VM 中工作,而另一个不能。
  • 相对于dict = sorted(dicta.items(), key=lambda x: [int(x) for x in x[1].values()], reverse = True),不同的变量名会更好,因为dict也是一个函数名。参见例如dict([["A",1], ["B", 2]])
  • @sg.sysel 这不是真名,只是一个例子。
  • @hmar 你应该问正确的问题。问题不在于对字典进行排序,而是为什么您的 VM 会出错。你问的问题越具体,得到答案的机会就越大。并使用正确的标签。

标签: python python-3.5


【解决方案1】:

如果你运行代码应该没有错误。但是你的字典没有名字。

dict_ =  {'data1': {'/home/data1': 273}, 'data2': {'/home/data2': 2}, 'data3': {'/home/data3': 10}, 'data4': {'/home/data4': 1}}

dictSorted = sorted(dict_.items(), key=lambda x: [int(x) for x in x[1].values()], reverse = True)

【讨论】:

  • 我只是把字典的输出,而不是代码。使用此代码,它可以在一个 VM 中工作,而不能在使用相同 virtualenv 的其他 VM 中工作。
  • 没有实际代码是不可能找到错误的。示例代码应该可以在任何地方使用。我能预见到这种错误的唯一情况是x[1].values() 返回None,即int(x) 对应于int(None)
  • @sg.sysel 如果那是错误,当值为空时我该如何处理?
  • 最简单的方法是创建一个新的字典并只添加没有 None 值的条目。 stackoverflow.com/a/33797147/4685974
  • 我刚刚在字典中找到了这个键:'README': { None: None },所以错误可能在那里..
猜你喜欢
  • 2017-02-02
  • 1970-01-01
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 2013-02-19
  • 2021-05-01
相关资源
最近更新 更多