在python中排序字符串值

2024-09-28 21:06:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典:

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'

有人能解释为什么我得到了一个不同的价值观,以及我怎样才能得到我需要的价值观吗?你知道吗


Tags: 字符串代码testfordata字典排序password
3条回答

这是因为使用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'

看起来您需要对d的键进行排序,然后连接相应的值。你知道吗

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

这类似于Óscar的答案,但我不喜欢在dict中显式地“索引”

您必须对排序,然后将相应的联接起来。请尝试一下:

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

''.join(data[k] for k in sorted(data))
=> '100000testTokenExample123456508852342226'

当然,您的解决方案也能起作用(不过要长一点)。您只需使用itemgetter(0)作为排序键,这将是dict的键:

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

更简单的是:我们甚至不需要显式指定排序键,默认情况下元组的排序将完全满足您的要求:

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

相关问题 更多 >