【问题标题】:sorting string values in python在python中对字符串值进行排序
【发布时间】:2019-05-08 15:51:08
【问题描述】:

我有一本字典:

data = {
    'Description': 'test',
    'Amount': '100000',
    'TerminalKey': '1508852342226',
    'OrderId': 'TokenExample',
    'Password': '123456'
}

我需要得到一个排序值的字符串:

'100000testTokenExample1234561508852342226'

我的代码:

data = "".join([v for k, v in sorted(data.items(), key=itemgetter(1))])

输出这个:

'1000001234561508852342226TokenExampletest'

有人能解释一下为什么我会得到不同的价值,以及如何获得我需要的价值吗?

【问题讨论】:

  • ''.join(sorted(d.values())) 是获取输出的较短方式。就您的问题而言,为什么您还期待别的东西?
  • 您为什么希望test 排在1508852342226 之前?
  • itemgetter(1) 返回值,itemgetter(0) 返回键。如果要按键排序,请使用itemgetter(0)

标签: python python-3.x sorting dictionary


【解决方案1】:

那是因为使用key=itemgetter(1) 您正在按值排序

要按键排序,就像您在示例中要求的那样,请使用itemgetter(0)

>>> "".join([v for k, v in sorted(data.items(), key=itemgetter(0))])
'100000testTokenExample1234561508852342226'

请注意,同样简单地对项目元组进行排序(使用它们的自然顺序),您会得到相同的排序:

>>> "".join([v for k, v in sorted(data.items())])
'100000testTokenExample1234561508852342226'

【讨论】:

    【解决方案2】:

    你要对keys进行排序,然后加入对应的values。请试一试:

    data = {
     'Description': 'test',
     'Amount': '100000',
     'TerminalKey': '508852342226',
     'OrderId': 'TokenExample',
     'Password': '123456',
    }
    
    ''.join(data[k] for k in sorted(data))
    => '100000testTokenExample123456508852342226'
    

    当然,您的解决方案也有效(不过,它要长一些)。您只需使用itemgetter(0) 作为排序键,这将是字典的

    ''.join(v for k, v in sorted(data.items(), key=itemgetter(0)))
    => '100000testTokenExample123456508852342226'
    

    更简单:我们甚至不需要显式指定排序键,默认情况下,元组的排序将完全按照您的意愿进行:

    ''.join(v for k, v in sorted(data.items()))
    => '100000testTokenExample123456508852342226'
    

    【讨论】:

    • 是的,它有效,非常感谢。你能提前解释一下区别吗?我很高兴了解这一点
    • 您的解决方案也可以,只要您将最后一部分替换为itemgetter(0)。您需要对 进行排序,而不是值。
    【解决方案3】:

    您似乎想对d 的键进行排序,然后连接相应的值。

    >>> ''.join(v for k, v in sorted(data.items()))
    '100000testTokenExample1234561508852342226'
    

    这类似于 Óscar 的回答,但我不喜欢明确地“索引”到字典中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      相关资源
      最近更新 更多